这里我要做的是获取应该来自A3的P1,P2,P3的值, 这适用于两个表但不适用于三个......
SELECT x.A1,x.A3,x.A4,A5,A6, x.A2 as P1,y.A2 as P2,z.A2 as P3
FROM Contact x,Contact y,Contact z
WHERE (x.id = y.id) AND (y.id = z.id) AND
(x.A3 ='pre-sale') AND (y.A3= pos-sale') AND(z.A3='current-sale')
ORDER by x.A4 DESC
例如 CONTACT表看起来像这样,有一些P1,P2,P3的预期结果
A1 A2 A3 A4 A5 A6 P1 P2 P3
----------------------------------------------------
1 22 pre-sale 9 kk 8 22 31 2
2 31 pos-sale 4 yy 6 44 61 11
3 2 current-sale 1 hh 2 null null null
4 44 pre-sale 2 kk 8
5 61 pos-sale 1 yy 6
6 11 current-sale 1 hh 2
对于P1,P2使用两次相同的表工作正常,添加第三个表的值 对于P1,P2是相同的,对于P3都是null
答案 0 :(得分:0)
我怀疑你尝试做的事情最好用条件聚合完成。要告诉你真正想要完成的事情有点难,因为并非所有列都是别名。这是一个例子
SELECT c.id,
max(case when c.A3 = 'pre-sale' then A4 end) as PreSale_A4,
max(case when c.A3 = 'pos-sale' then A2 end) as PosSale_A2,
max(case when c.A3 = 'current-sale' then A4 end) as CurrentSale_A2
FROM Contact c
group by c.id
order by PreSale_A4 desc;
您的原始查询存在一些基本问题。例如,您通过where
子句使用隐式连接,它始终是内部连接。您的问题的解决方案可能是使用外部联接。但是,条件聚合可能解决了这个问题。