正如@JNK提到的,你可以使用PIVOT
,但動態地做到這一點,我相信你就必須構建基於可用的狀態值的聲明。
下面的示例使用帶有硬編碼狀態值的PIVOT
,然後使用樣本數據中的值構造語句。你也可以從有效狀態表中獲得狀態值等。
create table #temp
(
[Status] nvarchar(20),
[Type] nvarchar(20)
)
insert into #temp values
('Connected', 'User'),
('Disabled', 'User'),
('Connected', 'Printer'),
('Disabled', 'Printer'),
('Connected', 'User'),
('Disabled', 'Unknown'),
('Disabled', 'Unknown')
-- pivot
select [Type], [Connected], [Disabled]
from
(select [Status], [Type] from #temp) t
pivot
(count([Status]) for [Status] in ([Connected], [Disabled])) as p
order by [Connected] desc
-- dynamic pivot
declare @statusList nvarchar(max),
@pivot nvarchar(max)
-- get the list of Status values
select @statusList = coalesce(@statusList + ',', '') + '[' + [Status] + ']'
from (select distinct [Status] from #temp) t
order by [Status]
-- build the pivot statement
set @pivot =
'select [Type],' + @statusList +
' from (select [Status], [Type] from #temp) t' +
' pivot (count([Status]) for [Status] in (' + @statusList + ')) p'
-- and execute it
exec (@pivot)
drop table #temp
這將工作,但我正在尋找更動態的東西,因爲狀態可能是.......即。連接,斷開連接,錯誤禁用,未連接,故障,關機等... –
@Kyle - 那麼你可能想使用'PIVOT'功能... – JNK