SQLite将特定的行列转换为其他列,并为每个列执行内部联接

时间:2018-05-07 09:21:11

标签: sql sqlite dynamic row multiple-columns

很抱歉这个奇怪的标题,但我不知道如何更好地说出来。

我有表Attributes

id|Name
-------
1 |att1
2 |att2
3 |...

Product

id|Name
-------
1 |Pro1
2 |Pro2
3 |Pro4

和表格ProductAttribute

id|productId|attributeId|value
------------------------------
1 |1        |1          |val11
2 |2        |1          |val21
3 |2        |2          |val22
4 |...

我希望从查询中获得以下结果,基本上我想获取所有产品和所有属性,并且每个产品行都将每个属性显示为一列。

我知道我可以&#34;做&#34;使用join,但是有很多属性,手动执行这样的操作是不可行的,所以我想动态地使用SQL语言而不是某些外部语言。< / p>

以下是生成的视图/查询的示例:

id|Product name|att1 |att2 |...
-------------------------------
1 |Pro1        |val11|Null |...
2 |Pro2        |val21|val22|...
3 |...

1 个答案:

答案 0 :(得分:0)

您只是在寻找透视查询:

SELECT
    p.Name,
    MAX(CASE WHEN a.Name = 'att1' THEN pa.value END) AS att1,
    MAX(CASE WHEN a.Name = 'att2' THEN pa.value END) AS att2
FROM Product p
LEFT JOIN ProductAttribute pa
    ON p.id = pa.productId
LEFT JOIN Attributes a
    ON pa.attributeId = a.id
GROUP BY
    p.id, p.Name;