无需指定连接列且不使用Pivot的Inner Join实现:单行列CTE横向展示数据的技术问询
解决方法:用恒真条件做连接
嘿,这个需求其实超简单搞定!既然你的三个CTE都只会返回一行数据,那完全不需要依赖任何实际字段来写连接条件——直接用一个永远为真的表达式就行。
你只需要把ON子句写成ON 1=1(这是绝大多数SQL数据库都支持的写法),或者如果你的数据库支持布尔常量的话,写成ON TRUE也可以。这样每个CTE的单行数据就会直接横向拼接在一起,完美满足你要的同一行展示的需求。
修改后的完整SQL代码如下:
;with cteSales as ( select count(*) as 'Total' from sales where weeknum = 33 ), cteVendors as ( select count(*) as 'vendors' from Vendors where weeknum = 33 ), cteClients as ( select count(*) as 'clients' from Clients where weeknum = 33 ) select total, vendors, clients from cteSales inner join cteVendors on 1=1 inner join cteClients on 1=1
为什么这样可行?
因为当每个被连接的对象都只有一行时,ON 1=1这种恒真条件会让数据库直接做笛卡尔积,但由于每个CTE只有一行,最终结果就是把三个独立的统计值合并到同一行里,完全不需要分组、Pivot这些复杂操作,简洁又高效。
内容的提问来源于stack exchange,提问作者fdkgfosfskjdlsjdlkfsf
相关产品推荐
相关产品推荐

