在键值对表中旋转数据

时间:2014-03-07 11:39:29

标签: sql sql-server sql-server-2008-r2 pivot

我有一个像这样的标准表:

MyKey   MyValue
--------------------------------
Var1    20
Var2    30
Var3    20
Var4    15
Var5    6

我希望它看起来像这样:

Var1        Var2        Var3        Var4
--------------------------------------------
20          30          20          15

未对数据进行分组或计算。到目前为止,我已经找到并尝试了很多方法:

SELECT 
    Var1,
    Var2,
    Var2,
    Var4
FROM 
    (select * 
     from MyTable
    ) T
PIVOT
(
    max(MyValue)
    FOR MyKey in 
    (
        'Var1', 'Var2', 'Var3', 'Var4'
    )
)
as V

这样可行,但我得到了多行。

另外,我尝试使用CASE ...... WHEN:

Select MyValue,
 Min(Case MyKey When 'Var1' Then MyKey End) Var1,
 Min(Case MyKey When 'Var2' Then MyKey End) Var2,
 ...
 FROM MyTable
 WHERE MyKey in 
 ('Var1', 'Var2', ...)

这不起作用,因为我无需分组。

我正在尝试做什么,如果是的话,怎么做?

编辑:

好吧,我想我已经确定了导致差异的原因,我编辑了SQL Fiddle。基本上,该表具有IDENTITY列。我没有意识到这会有所不同,但它会标记出来。

1 个答案:

答案 0 :(得分:3)

SQL Fiddle

MS SQL Server 2008架构设置

CREATE TABLE Table1
    ([pk] [int] IDENTITY(1,1) NOT NULL,
     [MyKey] nvarchar(4) not null, 
     [MyValue] nvarchar(30) not null)
;

INSERT INTO Table1
    ([MyKey], [MyValue])
VALUES
    ('Var1', '20'), ('Var2', '30'),
    ('Var3', '20'), ('Var4', '15'),
    ('Var5', 'aaa')
;

查询1

SELECT 
    Var1,
    Var2,
    Var3,
    Var4
FROM 
    (select [MyKey], [MyValue]
     from Table1
    ) AS T
PIVOT
(
    max(MyValue)
    FOR MyKey in 
    (
        Var1, Var2, Var3, Var4
    )
)
 AS V

<强> Results

| VAR1 | VAR2 | VAR3 | VAR4 |
|------|------|------|------|
|   20 |   30 |   20 |   15 |