【发布时间】:2014-03-07 11:39:29
【问题描述】:
我有一个像这样的标准表:
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 列。我没有意识到这会有所不同,但它会做出标记。
【问题讨论】:
-
能否向标准表和预期数据添加更多数据?
-
您的数据透视结果与您的预期有何不同?我有replicated your pivot on sql fiddle(尽管有一个小的更正),结果似乎正是你所期望的。
-
您已经提到
I get multiple rows但是当我尝试使用提到的输入表运行上述查询时,我没有得到多个值。SQL Fiddle 演示 sqlfiddle.com/#!3/c16b8/4 -
我正在运行的数据透视表包括表中的每一行。我稍微编辑了我的问题。在上面的示例中 - 枢轴返回 5 行而不是 1 行。
-
我已经更新了帖子,因为我似乎最初没有提供足够的信息来复制问题。
标签: sql sql-server sql-server-2008-r2 pivot