在另一列的条件/数据上的一列中显示数据
我希望从行中选择数据并将其显示在依赖的列中 关于相邻列中的数据。
示例:
这是我的数据:
ID STATUS VALUE
XYZ 1 7.50
XYZ 2 65.00
XYZ 3 795.00
ABC 1 15.60
ABC 3 563.50
ABC 2 79.00
DEF 3 597.00
DEF 1 23.00
DEF 2 89.60
我要找的结果是:
(1 = ValueA,2 = ValueB,3 = ValueC)
ID VALUEA VALUEB VALUEC
XYZ 7.50 65.00 795.00
ABC 15.60 79.00 563.50
DEF 23.00 89.60 597.00
我在此网站上发现了处理类似问题的条目,但不太适合这种情况。是否有一个简单的查询可以产生所需的结果?
答案 0 :(得分:2)
您应该能够使用带有CASE表达式的聚合函数来获得结果:
select id,
max(case when status = 1 then value end) ValueA,
max(case when status = 2 then value end) ValueB,
max(case when status = 3 then value end) ValueC
from yourtable
group by id;
见SQL Fiddle with Demo。 CASE表达式将检查每个status
,然后选择相关的最大值。将数据从行转换为列称为PIVOT。
您还可以使用PIVOT函数获取结果:
select id,
[1] ValueA,
[2] ValueB,
[3] ValueC
from yourtable
pivot
(
max(value)
for status in ([1], [2], [3])
) piv;
最后,您还可以多次在桌面上加入以返回结果:
select a.id,
a.value ValueA,
b.value ValueB,
c.value ValueC
from yourtable a
left join yourtable b
on a.id = b.id
and b.status = 2
left join yourtable c
on a.id = c.id
and c.status = 3
where a.status = 1;
答案 1 :(得分:1)
您正在寻找数据透视。一种方法是使用条件max()
聚合:
SELECT id ,
MAX(CASE WHEN status = 1 THEN Value
END) AS ValueA ,
MAX(CASE WHEN status = 2 THEN Value
END) AS ValueB ,
MAX(CASE WHEN status = 3 THEN Value
END) AS ValueC
FROM t
GROUP BY id;
答案 2 :(得分:0)
您似乎在寻找PIVOT声明。