2013-10-29 65 views
-1

这里我想要做的是获得应该来自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全部为空

+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子句使用隐式连接,这些子连接总是内连接。解决您的问题可能是使用外部连接。不过,条件聚合可能解决了这个问题。

+0

我试过但不工作... –

相关问题