SQL Server 2008 R2中具有值计数的交叉表查询
我已经搜索过了,但没有找到(或理解!)如何做我需要做的事情。我觉得问这个有点傻,因为还有其他的例子,但我就是不明白 以下是我在视图中看到的数据:SQL Server 2008 R2中具有值计数的交叉表查询,sql,sql-server,sql-server-2008-r2,pivot,Sql,Sql Server,Sql Server 2008 R2,Pivot,我已经搜索过了,但没有找到(或理解!)如何做我需要做的事情。我觉得问这个有点傻,因为还有其他的例子,但我就是不明白 以下是我在视图中看到的数据: [Approach Status] [Clinic] Approached GI Med Onc Pending GI Med Onc Approached GI Med Onc Not Approached Breast Med Onc Approached
[Approach Status] [Clinic]
Approached GI Med Onc
Pending GI Med Onc
Approached GI Med Onc
Not Approached Breast Med Onc
Approached Breast Med Onc
我需要的是:
[Approach Status] [GI Med Onc] [Breast Med Onc]
Approached 2 1
Not Approached 0 1
Pending 1 0
我一直在修改我在这里找到的代码,但是。。。。感谢您的帮助 有几种不同的方法可以将行转换为列。一种方法是使用聚合函数和CASE表达式:
select ApproachStatus,
sum(case when Clinic = 'GI Med Onc' then 1 else 0 end) [GI Med Onc],
sum(case when Clinic = 'Breast Med Onc' then 1 else 0 end) [Breast Med Onc]
from yt
group by ApproachStatus;
看
或者,由于您使用的是SQL Server 2005+,因此可以使用PIVOT函数:
select ApproachStatus, [GI Med Onc],[Breast Med Onc]
from yt
pivot
(
count(Clinic)
for Clinic in ([GI Med Onc],[Breast Med Onc])
) piv;
看
如果您有一个未知的Clinic
值,则需要使用动态SQL来获得结果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Clinic)
from yt
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ApproachStatus,' + @cols + '
from yt
pivot
(
count(Clinic)
for Clinic in (' + @cols + ')
) p '
execute(@query)
看。所有查询将给出一个结果:
| APPROACHSTATUS | GI MED ONC | BREAST MED ONC |
------------------------------------------------
| Approached | 2 | 1 |
| Not Approached | 0 | 1 |
| Pending | 1 | 0 |
谢谢第一个示例有效,但第二个(首选)返回:GI Med Onc Breast Med Onc APNECTED 1 0挂起1 0 APNECTED 1 0 Not APNECTED 0 1 APNECTED 01@ClintFinch你能编辑演示吗使用一些示例数据和正在使用的查询?奇数。。。。当我使用SQLFIDLE时,我得到了正确的值。。。。唯一不同的是,我的数据源是一个包含许多列的视图(不仅仅是我在这里引用的两列),而不是一个表,这是否重要@ClintFinch如果返回的列数多于透视所需的列数,则可以更改结果,因为这些列用于透视应用的分组中。如果我向多行添加一个具有不同值的列,然后尝试透视,结果将由于附加列而发生倾斜。您应该只包括需要在pivot.ok中显示的列,那么为什么它可以在sqlfiddle中工作,而不能在managementstudio中工作呢?这个例子包含了我需要的所有内容——为了简洁起见,我在我的帖子中删去了其他内容。这些是“临床”一栏中的不同值(只有前列腺尚未被记录-将被记录)未知的乳腺Med Onc耳鼻喉科Ourisman无临床数据GI Med Onc