使用两个表选择多列中的值计数

时间:2015-06-01 22:53:00

标签: tsql

我还是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表?

1 个答案:

答案 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重复此项。