gpt4 book ai didi

sql - SQL Server 2008 R2 中带有值计数的交叉表查询

转载 作者:行者123 更新时间:2023-12-03 03:24:19 25 4
gpt4 key购买 nike

我已经搜索过,但没有找到(或理解!)如何做我需要做的事情。我觉得问这个有点傻,因为还有其他例子,但我只是不明白......

这是我在 View 中拥有的数据:

[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 Fiddle with Demo

或者,由于您使用的是 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;

参见SQL Fiddle with Demo .

如果您有未知的 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)

参见SQL Fiddle with Demo 。所有查询都会给出结果:

| APPROACHSTATUS | GI MED ONC | BREAST MED ONC |
------------------------------------------------
| Approached | 2 | 1 |
| Not Approached | 0 | 1 |
| Pending | 1 | 0 |

关于sql - SQL Server 2008 R2 中带有值计数的交叉表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com