2013-03-01 113 views
0

我想爲最低價格爲目的-A項目和最大價格 爲B目的項目,此外我按區域分組我的項目。如何避免SQL中的子查詢重複?

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 

該查詢給我想要的輸出,但我不喜歡它 有兩個原因:

1)我想

FROM MYTABLE 
WHERE SOMETHING = 'SOMEVALUE' 

僅被調用一次。

2)當我的完整外連接中的行來自右表 時,我得到ZONE null。

我該如何解決這些問題。

在我的查詢中是否還有一些問題?

+0

任何小的變化是什麼,用來收集MIN_PRICE的原因目的'B'的max_price的目的'A'? – 2013-03-01 13:56:02

+0

在某個區域,您可以以昨天交易的最低買價以今天的價格出售,並以昨日最高買入價買入。我希望我的查詢的輸出包含「zone,today_sell_price,today_buy_price」。那意味着什麼? – jimifiki 2013-03-01 14:08:02

回答

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 
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 

還是本