如何自定义SQL查询结果(select in select)
问题描述:
这可能是非常简单的解决方案,但我挣扎了几个小时而没有任何结果。让我用例子来展示我的问题。我有一个表:如何自定义SQL查询结果(select in select)
productID|attributeID|attributeValue
001 | a01 | value1
001 | a02 | value2
002 | a01 | value2_1
002 | a02 | value2_2
我曾尝试使用此查询代码:
SELECT
productID,
attributeValue,
NEW_attributeValue = (SELECT attributeValue
FROM table1
WHERE attributeID = 'a02')
FROM
table1
WHERE
attributeID = 'a01'
上面的查询代码只是我的概念。代码失败,因为第二个子查询有多个结果。你有想法如何得到这个结果:
001 | value1 | value2
002 | value2_1 | value2_2
答
一个简单的方法是有条件的聚集
select productId,
max(case when attributeID = 'a01' then attributeValue end) as a01,
max(case when attributeID = 'a02' then attributeValue end) as a02
from t
group by productId;
答
列
使用数据透视表的概念属性Id
答
试试这个: -
SELECT u.productID,
u.attributeValue,
NEW_attributeValue = (SELECT attributeValue FROM table1 WHERE productID = u.productID and attributeID = 'a02')
FROM table1 AS u
WHERE attributeID = 'a01'
但是最好使用条件汇总
答
使用PIVOT会是这个样子:
SELECT *
FROM (
SELECT productID, attributeID, attributeValue
FROM table1
) AS SourceTable
PIVOT (
MAX([attributeValue])
FOR [attributeID] IN ([a01], [a02])
) AS PivotTable;