问题描述
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