我正在使用MS SQL Server 2008R2,我有一个名为Category
的表
Profile Batch Doubles Feeder Image Hardware
A 1 1 0 2 1
B 1 2 3 0 4
A 1 5 1 6 1
A 1 2 1 2 7
其中Doubles
,Feeder
,Image
,Hardware
是事件类别。
列名称配置文件,批处理已修复,但稍后可能会添加更多事件类别。 我希望单独使用unpivot和dynamic来汇总所有事件类别。 我的预期输出是,
EventCategory Occurence
Doubles 10
Feeder 5
Image 10
Hardware 13
通过更多事件类别可能会在以后添加我的意思是,当添加更多类别时,我需要在unpivot查询中动态添加这些事件类别, 例如预期产出
EventCategory Occurence
Doubles 10
Feeder 5
Image 10
Hardware 13
Late 6
Sensor 20
. .
. .
. . --And so on
我还没有尝试过,请建议我动态的unpivot查询。 希望我对这个问题很清楚,任何帮助都会受到赞赏。
答案 0 :(得分:1)
我认为这就是你所需要的:
CREATE TABLE Category
(
[Profile] varchar(10),
Batch int,
Doubles int,
Feeder int,
[Image] int,
Hardware int
)
INSERT Category VALUES
('A', '1', '1', '0', '2', '1'),
('B', '1', '2', '3', '0', '4'),
('A', '1', '5', '1', '6', '1'),
('A', '1', '2', '1', '2', '7')
DECLARE @query nvarchar(MAX);
SELECT @query = COALESCE(
@query+char(10)+'UNION ALL'+char(10)+'SELECT '+QUOTENAME(name,'''')+' EventCategory, SUM('+QUOTENAME(name)+') Occurence FROM Category',
'SELECT '+QUOTENAME(name, '''')+' EventCategory, SUM('+QUOTENAME(name)+') Occurence FROM Category')
FROM sys.columns C WHERE [object_id]=OBJECT_ID('Category')
AND name<>'Profile'
EXEC (@query)