如何动态使用 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
其中 Doubles
、Feeder
、Image
、Hardware
是事件类别。
列名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)
我正在使用 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
是事件类别。
列名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)