0

目的Aの最小価格と目的Bの最大価格が必要です。さらに、アイテムをゾーンごとにグループ化します。

SELECT ZONE, MIN_PRICE, MAX_PRICE --,LEFT_ZONE
  FROM 
  (SELECT MIN(PRICE) AS MIN_PRICE , ZONE  AS LEFT_ZONE
    FROM MYTABLE 
    WHERE PURPOSE = 'A'
      AND SOMETHING = 'SOMEVALUE'
    GROUP BY ZONE 
   )
    FULL OUTER JOIN 
  (SELECT MAX(PRICE) AS MAX_PRICE, ZONE_CD  
    FROM MYTABLE 
    WHERE PURPOSE = 'B'
      AND SOMETHING = 'SOMEVALUE'
    GROUP BY ZONE 
   )
  ON LEFT_ZONE = ZONE 

このクエリは私が望む出力を提供しますが、2つの理由でそれが好きではありません:

1)欲しい

FROM MYTABLE 
WHERE SOMETHING = 'SOMEVALUE'

一度だけ呼び出されます。

2)行が完全外部結合の右側のテーブルからのものである場合、ZONEnullを取得します。

どうすればこれらの問題を解決できますか。

クエリに他に問題がありますか?

4

2 に答える 2

3

CASEこれを取得するために式を使用してみましたか?

select zone,
  min(case when PURPOSE = 'A' then price end) min_price,
  max(case when PURPOSE = 'B' then price end) max_price
from MYTABLE 
where SOMETHING = 'SOMEVALUE'
group by zone
于 2013-03-01T13:54:06.803 に答える
0

これを試して:

  SELECT 
    ZONE, 
    SUM (CASE WHEN PURPOSE = 'A' THEN MIN(PRICE) ELSE 0 END) AS MIN_PRICE,
    SUM (CASE WHEN PURPOSE = 'B' THEN MAX(PRICE) ELSE 0 END) AS MAX_PRICE
  FROM 
    MYTABLE 
  WHERE 
    SOMETHING = 'SOMEVALUE'
  GROUP BY 
    ZONE 

またはこれの小さなバリエーション

于 2013-03-01T13:57:53.013 に答える