如何将下列表格合并/转置为每个客户的一个记录,但将参数设置为列?创建查询以返回单个结果中的参数和参数值
4表:
- 公司
- 属性
- Company_Attribute
- Company_Attribute_Values
源表:
所需的输出:
如何将下列表格合并/转置为每个客户的一个记录,但将参数设置为列?创建查询以返回单个结果中的参数和参数值
4表:
源表:
所需的输出:
貌似有两个问题加入表和创建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 |
顺便说一句没有道理,你有两个表店相同的数据。 Company_Attribute
与Company_Attribute_Values
相同的表少一个字段。所以只要删除第一个。
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) |
Thanx作为响应,我可以再问一个问题。属性表是动态的,因此可以在程序中添加新的参数。所以我需要一个动态的参数值列表。同样的表格只是为了说明情况,实际的表格有点复杂。 – Daniel
你可以做同样的动态数据透视http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query –
你见过支点[** **样品(https://technet.microsoft.com/es-es/library /ms177410(v=sql.105).aspx)? –
对于你的情况,只需将所有4个表加在一起,然后将结果以 –