如何在SQL Server查询中将值用作列标题

时间:2015-09-25 13:23:48

标签: sql-server pivot

我有一个视图,输出名称,字段,值如下:

 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;

如果没有独特的价值,我觉得这可能是不可能的,但我可能也会错过一些东西。

1 个答案:

答案 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):