-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 全部为空

4

1 回答 1

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

于 2013-10-29T14:10:43.523 回答