如何在 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):
我有一个输出名称、字段、值的视图,如下所示:
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):