2013-10-29 63 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

我試過但不工作... –

相關問題