2013-03-01 3 views
0

Я хочу Min Price для цели-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 из цель «A» с max_price цели «B»? –

+0

В данной зоне вы можете продать сегодня по самой низкой цене предложения, торгуемой вчера, и покупать по самой высокой цене спроса, торгуемой вчера. Я хочу, чтобы выход моего запроса содержал «zone, today_sell_price, today_buy_price». Это смысл? – jimifiki

ответ

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 

или любое небольшое изменение этой

 Смежные вопросы

  • Нет связанных вопросов^_^