sql—在复杂数据透视中组合列

vbopmzt1  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(276)

我有这张table:

输入


我想把它转换成另一个表,包含
日期/标识/顺序列(主键列)
totalcount列,包含原始表的count列的值,其中所有cond列都为null
每个condx列有一个count列,包含原始表的count列的值,其中condx=1,cond=null的其余部分
非空(cond1或cond2或cond3)+(conda或condb)的每个组合的一个计数列,包含原始表的计数列的值,其中两个适用的cond=1,其余的=null

示例:


基本上,我希望我的新表有以下列:
日期、id、订单、总数
cond1计数,cond2计数,cond3计数,condacount,condbcount
cond1和condacount,cond1和condbcount,cond2和condacount,cond2和condbcount。。。
从示例图像中,我们将得到以下值:

期望输出


(注:order=2的condbcount=0,在图像版本中丢失)
如果有的话,我会展示一些sql,但实际上我不太确定从哪里开始解决这个问题。我可以天真地做很多不同的事情 SELECT Count WHERE ... ,但我想知道是否有更好的解决办法。

kd3sttzy

kd3sttzy1#

没有你的table结构。您可以使用sum&values对多个列求和,即使与 CASE 例子:

SELECT *
FROM (
    SELECT Date, Id, [Order], 
        (SELECT SUM(v) 
       FROM (VALUES (ISNULL(Cond1,0)), (ISNULL(Cond2,0)),...) AS value(v)) Cond1ACount
    FROM YourTable
) sub
GROUP BY Date, Id, [Order]

相关问题