2013-07-10 6 views
0

Я нашел два способа взять каждую запись, которая разделяет одно значение столбца, среди некоторых отдельных наборов записей, идентифицированных каждым из них с помощью набора условий WHERE. (Пример запроса более ясен ...)Oracle: элегантный способ извлечения записи, которая имеет значение столбца

Знаете ли вы, что третий способ более сентиментальный? возможно, используя аналитическую функцию?

select a.grup_gruppo_id 
FROM conf_gruppi_delim a, conf_gruppi_delim b, conf_gruppi_delim c 
WHERE  a.ASTG_ASSE_TIPO_GRUPPO_ID = 'BASE_TSC' 
     AND a.TGAS_TIPGRUPDETT_ASSI_ID = 'C5JqJeruozekiQtN' 
     AND a.DELI_VALORE1 = '1RWOoegWqEdL9Vch' 
     AND a.DELI_FLAG_ANN = 'N' 
     -- 
     AND b.ASTG_ASSE_TIPO_GRUPPO_ID = 'TIPI_MERCATO' 
     AND b.TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_time_f' 
     AND b.DELI_VALORE1 = 'ZFLIB' 
     AND b.DELI_FLAG_ANN = 'N' 
     -- 
     AND c.ASTG_ASSE_TIPO_GRUPPO_ID = 'SEQUENZA' 
     AND c.TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_sefm_f' 
     AND c.DELI_VALORE1 = 'LE8IZjuiOHVtxAwi' 
     AND c.DELI_FLAG_ANN = 'N' 
     -- 
     AND A.GRUP_GRUPPO_ID = b.GRUP_GRUPPO_ID 
     AND b.GRUP_GRUPPO_ID = c.GRUP_GRUPPO_ID 




SELECT GRUP_GRUPPO_ID 
    FROM conf_gruppi_delim a 
WHERE  ASTG_ASSE_TIPO_GRUPPO_ID = 'BASE_TSC' 
     AND TGAS_TIPGRUPDETT_ASSI_ID = 'C5JqJeruozekiQtN' 
     AND DELI_VALORE1 = '1RWOoegWqEdL9Vch' 
     AND DELI_FLAG_ANN = 'N' 
INTERSECT 
SELECT GRUP_GRUPPO_ID 
    FROM conf_gruppi_delim a 
WHERE  ASTG_ASSE_TIPO_GRUPPO_ID = 'TIPI_MERCATO' 
     AND TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_time_f' 
     AND DELI_VALORE1 = 'ZFLIB' 
     AND DELI_FLAG_ANN = 'N' 
INTERSECT 
SELECT GRUP_GRUPPO_ID 
    FROM conf_gruppi_delim a 
WHERE  ASTG_ASSE_TIPO_GRUPPO_ID = 'SEQUENZA' 
     AND TGAS_TIPGRUPDETT_ASSI_ID = '_tgas_sefm_f' 
     AND DELI_VALORE1 = 'LE8IZjuiOHVtxAwi' 
     AND DELI_FLAG_ANN = 'N' 

ответ

1

В этом случае, когда вы просто фильтрация на 3-х различных наборов значений

SELECT GRUP_GRUPPO_ID 
    FROM conf_gruppi_delim a 
WHERE (ASTG_ASSE_TIPO_GRUPPO_ID, 
     TGAS_TIPGRUPDETT_ASSI_ID, 
     DELI_VALORE1, 
     DELI_FLAG_ANN) IN 
    (('SEQUENZA','_tgas_sefm_f','LE8IZjuiOHVtxAwi','N'), 
     ('TIPI_MERCATO','_tgas_time_f','ZFLIB','N'), 
     ('BASE_TSC','C5JqJeruozekiQtN','1RWOoegWqEdL9Vch','N')) 
GROUP BY GRUP_GRUPPO_ID 
HAVING COUNT(distinct ASTG_ASSE_TIPO_GRUPPO_ID) = 3