如何动态使用 unpivot?

How Can I Use unpivot dynamically?

我正在使用 MS SQL Server 2008R2,我有一个名为 Category

的 Table
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 是事件类别。

列名Profile、Batch是固定的,但以后可能会添加更多的Event Categories。 我想用 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

我还没有尝试过,请建议我使用动态逆透视查询。 希望我对这个问题很清楚,任何帮助将不胜感激。

我想这就是你需要的:

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)