如何将以下表格合并/转置为每个客户一条记录,但将参数作为列?
4桌:
来源表:
期望的输出:
答案 0 :(得分:0)
看起来有两个问题加入表并创建PIVOT。
我会帮助你加入
SELECT C.Name, A.Title, CAV.Value
FROM Company C
JOIN Company_Attribute_Values CAV
ON C.id = CAV.company_id
JOIN Attribute A
ON CAV.attribute_id = A.id
<强> SQL Fiddle Demo 强>
| Name | Title | Value |
|----------|----------------|----------|
| ABC Corp | Currency | USD |
| ABC Corp | Reg No | Reg123 |
| ABC Corp | Vat No | Vat5153 |
| ABC Corp | AccountManager | Mr J Doe |
| XYZ Corp | Currency | EUR |
| XYZ Corp | Vat No | VAT654 |
| ACME | Currency | EUR |
| ACME | Reg No | Reg567 |
| ACME | Vat No | Vat213 |
btw没有意义你有两个表存储相同的数据。 Company_Attribute
与Company_Attribute_Values
相同,只有一个字段。所以只需删除第一个。
<强> PIVOT part 强>
WITH cte as (
SELECT C.Name, A.Title, CAV.Value
FROM Company C
JOIN Company_Attribute_Values CAV
ON C.id = CAV.company_id
JOIN Attribute A
ON CAV.attribute_id = A.id
)
SELECT name,
[Currency], [Reg No], [Vat No], [AccountManager]
FROM
cte
PIVOT
(
MAX([Value])
FOR Title IN ([Currency], [Reg No], [Vat No], [AccountManager])
) AS PivotTable;
<强>输出强>
| name | Currency | Reg No | Vat No | AccountManager |
|----------|----------|--------|---------|----------------|
| ABC Corp | USD | Reg123 | Vat5153 | Mr J Doe |
| ACME | EUR | Reg567 | Vat213 | (null) |
| XYZ Corp | EUR | (null) | VAT654 | (null) |