我还是tsql的新手,并试图找出如何构建此查询。
我有两张桌子。一个名为mirror的镜像,其中包含所有校园的正式列表,用于填充webform上用户的校园下拉列表。然后,他们可以选择5个选项,然后在提交表单(请求)时使用他们的请求填充另一个表。即。 CampusChoice1,CampusChoice2..etc。
我正在尝试构建一个页面来显示所有收集数据的最终结果。经过一番阅读后,我想我可能需要使用PIVOT才能实现这一目标,但我无法理解这一问题。
我可以为每个选项做一个基本的查询1-5,但我有点想要它们一起将是零或零,其中没有选择一些校园。 像
这样的东西- 单个col的简单计数 选择CampusChoice1,COUNT(*)为'#' 来自请求 分组:CampusChoice1
或者 - 但是这并没有给出我想要的结果,因为它没有考虑到所有可能的选择。 选择CampusChoice1,COUNT()为'#', CampusChoice2,COUNT()为'#', CampusChoice3,COUNT()为'#', CampusChoice4,COUNT()为'#', CampusChoice5,COUNT(*)为'#' 来自Operations.dbo.TransferRequest 分组:CampusChoice1,CampusChoice2,CampusChoice3,CampusChoice4,CampusChoice5
我有什么想法可以展示这个吗?我是否在正确的轨道上至少使用PIVOT表?
答案 0 :(得分:0)
不确定我是否理解你的问题,但假设你有这个:
CampusChoice | Other data ...
------------------------------
CampusChoice1 | ...
CampusChoice2 | ...
CampusChoice1 | ...
然后,对于上面只有3行的示例,您需要此结果:
CampusChoice1 | 2 | CampusChoice2 | 1 | CampusChoice3 | 0 | ...
实现这一目标的T-SQL是:
select
'CampusChoice1',
sum( case when CampusChoice = 'CampusChoice1' then 1 else 0 end ) '#',
'CampusChoice2',
sum( case when CampusChoice = 'CampusChoice2' then 1 else 0 end ) '#',
'CampusChoice3',
sum( case when CampusChoice = 'CampusChoice3' then 1 else 0 end ) '#',
...
from
...
使用与案例相结合的总和为CampusChoice1的每一行加1,为每行不为CampusChoice1加0,为每个CampusChoiceN重复此项。