我有一个视图,输出名称,字段,值如下:
Name | Field | Value
------|-------|------
Item1 | SKU | 83841
Item1 | UOM | EA
Item1 | QTY | 47
Item2 | SKU | 83458
Item2 | UOM | PK
Item2 | QTY | 88
我想得到:
Name | SKU | UOM | QTY
------|-------|-----|----
Item1 | 83841 | EA | 47
Item2 | 83458 | PK | 88
我试过Pivot,但是如果我聚合了Name,那么我只得到一个值。这是我的疑问:
SELECT SKU, UOM, QTY
FROM
(
SELECT Field, Value
FROM dbo.ProductExport
) d
PIVOT
(
MAX(FieldValue)
for Value in (SKU, UOM, QTY)
) piv;
如果没有独特的价值,我觉得这可能是不可能的,但我可能也会错过一些东西。
答案 0 :(得分:3)
您必须使用FOR Field
,因为PIVOTed列来自Field
:
SELECT Name, SKU, UOM, QTY
FROM
(
SELECT Name, Field, Value
FROM dbo.ProductExport
) d
PIVOT
(
MAX(Value)
for Field in (SKU, UOM, QTY)
) piv;
同时将Name
添加到子查询中,并将fieldvalue
替换为value
,这是您在表格中所需的数据。
SQL Fiddle(感谢Giannis Paraskevopoulos):