-1

ここで私がやろうとしているのは、A3 から取得する必要がある P1、P2、P3 の値を取得することです。これは 2 つのテーブルではうまく機能しますが、3 つのテーブルでは機能しません...

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 の場合、同じテーブルを 2 回使用するとうまくいきます。3 番目のテーブルを追加すると、P1、P2 の値は同じになり、P3 の値はすべて null になります。

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 に答える