在单个结果中创建对 return 参数和参数值的查询
Creating query to return Parameter and Parameter values in single result
我如何consolidate/transpose将下表为每个客户的一条记录,但将参数作为列?
4 桌:
- 公司
- 属性
- Company_Attribute
- Company_Attribute_值
源表:
期望输出:
看起来有两个问题加入 table 和创建 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
| 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 |
顺便说一句,你有两个 table 来存储相同的数据是没有意义的。 Company_Attribute
与 Company_Attribute_Values
相同 table 少一个字段。所以只删除第一个。
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) |
我如何consolidate/transpose将下表为每个客户的一条记录,但将参数作为列?
4 桌:
- 公司
- 属性
- Company_Attribute
- Company_Attribute_值
源表:
期望输出:
看起来有两个问题加入 table 和创建 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
| 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 |
顺便说一句,你有两个 table 来存储相同的数据是没有意义的。 Company_Attribute
与 Company_Attribute_Values
相同 table 少一个字段。所以只删除第一个。
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) |