SQL以表格结构列出数据

时间:2014-03-17 07:35:20

标签: sql sql-server c#-4.0 pivot tabular

MSSQL Table1有以下数据:


AttributeID | ProductID | Attribute  | Value      |
--------------------------------------------------
1           | 1111      | Attribute1 | Prod1_Val1 |
2           | 1111      | Attribute2 | Prod1_Val2 |
3           | 1111      | Attribute3 | Prod1_Val3 |
4           | 2222      | Attribute1 | Prod2_Val1 |
5           | 2222      | Attribute2 | Prod2_Val2 |
6           | 2222      | Attribute3 | Prod2_Val3 |
7           | 3333      | Attribute1 | Prod3_Val1 |
8           | 3333      | Attribute2 | Prod3_Val2 |
9           | 3333      | Attribute3 | Prod3_Val3 |
10          | 4444      | Attribute1 | Prod4_Val1 |
11          | 4444      | Attribute2 | Prod4_Val2 |
12          | 5555      | Attribute4 | Prod5_Val1 |

MSSQL Table2具有以下数据:


ProductID | ProductName |
--------------------------------------------------
1111      | Product1    |
2222      | Product2    |
3333      | Product3    |
4444      | Product4    |
5555      | Product5    |

我需要的结果是:


Product    | Product1   | Product3   | Product3   | Product4   | Product5   |
Attribute1 | Prod1_Val1 | Prod2_Val1 | Prod3_Val1 | Prod4_Val1 | --         |
Attribute2 | Prod1_Val2 | Prod2_Val2 | Prod3_Val2 | Prod4_Val2 | --         |
Attribute3 | Prod1_Val3 | Prod2_Val3 | Prod3_Val3 | --         | --         |
Attribute4 | --         | --         | --         | --         | Prod5_Val1 |
Attribute5 | --         | --         | --         | --         | --         |

我想知道使用Table1和Table2是否可以使用SQL本身实现这个期望的结果。如果是,请通过提供SQL来帮助我。感谢您提前及时提供帮助。

1 个答案:

答案 0 :(得分:0)

正如TomTom所提到的,您将需要使用SQL Server的PIVOT operator

SELECT Attribute, [Product1], [Product2], [Product3], [Product4], [Product5]
FROM (
    SELECT ProductName, Attribute, Value
    FROM Table1 
    INNER JOIN Table2 ON ( Table2.ProductId = Table1.ProductId )
) AS SourceTable
PIVOT (
    Min(Value)
    FOR ProductName IN ([Product1], [Product2], [Product3], [Product4], [Product5])
) AS PivotTable

请注意,您需要预先确定在写入时要输出的列数(即[Product1],[Product2],..., [ProductN] )你的SQL查询。

此外,由于PIVOT聚合数据,上面的示例使用Min()函数。 (您可以根据需要轻松使用Max()或其他聚合函数。)对于没有值的所有元素,输出 NULL