将枢轴上的计数转换为位/标志?

问题描述

我有一个有效的枢纽查询

SELECT * FROM
    (
        select [cid],[cid] as c,[Category] from [MyTbl] where [Conditional] = 0
    )
as src PIVOT(COUNT(c) FOR [Category] in ([SciFi],[Horror],[Comedy])) AS piv

这很棒,它会产生这样的东西:

cid | SciFi | Horror | Comedy
-----------------------------
 1      0        3       0
 2      1        2       1
 3      6        2       4

但是实际上我不想要计数,我只想要一个true或false标志(最好是0或1)

cid | SciFi | Horror | Comedy
-----------------------------
 1      0        1       0
 2      1        1       1
 3      0        1       1

我尝试将count(c)位包装在case语句中,但我只是遇到语法错误-假设数据透视表无法像这样工作。

解决方法

我建议条件聚合。与特定于供应商的pivot语法相比,它要灵活得多,并且可以让您轻松地执行所需的操作:

select cid,max(case when category = 'SciFi'  then 1 else 0 end) SciFi,max(case when category = 'Horror' then 1 else 0 end) Horror,max(case when category = 'Comedy' then 1 else 0 end) Comedy
from mytbl
where conditional = 0
group by cid