如何在 SQL 服务器查询中将值用作列 headers

How do I use values as a column headers in a SQL Server Query

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

 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;

我觉得如果没有唯一值,这可能是不可能的,但我也可能会遗漏一些东西。

您必须使用 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,这是您在 table.

中想要的数据

SQL Fiddle(感谢 Giannis Paraskevopoulos):