2016-07-28 27 views
0

我使用的MS SQL Server 2008 R2,我有一个表命名为Category如何动态使用unpivot?

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 

DoublesFeederImageHardware的事件类别。

列名称配置文件,批次已修复,但更多事件类别可能稍后添加。 我想要将所有事件类别与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查询。 希望我清楚的问题,任何帮助,将不胜感激。

+2

尽管实际上你似乎想[逆转置(http://stackoverflow.com/q/18775409/11683),不转动。 – GSerg

+0

是的,你能否给我提供解决方案? – Ruhaan

+0

你可以点击链接吗? – GSerg

回答

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) 
+0

感谢Pawel Dyl :) – Ruhaan