有幾種不同的方法可以將行轉換爲列。你能做到這一點的方法之一是使用聚合函數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 +,你可以使用旋轉功能:
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 |
謝謝。第一個例子的工作,但第二個(優選的)將返回此: GI醫學ONC乳腺癌醫學ONC 走近1 0 未決1 0 走近1 0 未接近0 1 走近0 1 –
@ClintFinch可以編輯演示(http://sqlfiddle.com/#!3/ef8f0/3)與您的一些示例數據和您正在使用的查詢? – Taryn
奇怪....我使用sqlfiddle時得到了正確的值....唯一的區別是我的數據源是一個包含許多列的視圖(不僅僅是我在這裏引用的兩個視圖)而不是表,應該如此? http://sqlfiddle.com/#!3/a4645/1/0 –