在单个结果中创建对 return 参数和参数值的查询

Creating query to return Parameter and Parameter values in single result

我如何consolidate/transpose将下表为每个客户的一条记录,但将参数作为列?

4 桌:

源表:

期望输出:

看起来有两个问题加入 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

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 |

顺便说一句,你有两个 table 来存储相同的数据是没有意义的。 Company_AttributeCompany_Attribute_Values 相同 table 少一个字段。所以只删除第一个。

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) |