2017-05-04 42 views
0

選擇查詢組我有此查詢:通過別名

SELECT * FROM TABLE1 WHERE AREA_CODE IN ('929', '718', '347', '646') GROUP BY AREA_CODE 

是否有可能與名稱「NEW_YORK_AREA」包括所有這四個區域代碼只得到一個記錄行?爲了更清楚一點,假設您在表中爲上面列出的每個區號在表中有4條記錄,但您只想得到一個帶有別名'NEW_YOUR_AREA'的結果(行)。我希望它很清楚,如果您有任何問題,請告訴我,我將編輯該問題。謝謝大家,祝你有個美好的一天。

更新:需求已更改,不再需要。感謝大家的幫助! :)

+0

請張貼表1的結構,以及對你想要檢索的輸出。 – hisnameismyname2

回答

1

DB2支持listagg()。所以:

SELECT 'NEW_YORK_AREA' as cityname, 
     LISTAGG(AREA_CODE, ',') WITHIN GROUP (ORDER BY AREA_CODE) as areacodes 
FROM TABLE1 
WHERE AREA_CODE IN ('212', '929', '718', '347', '646') ; 

我有益補充212,最有名的紐約區號;)

如果您有重複,那麼你需要使用子查詢聚合之前將其刪除。

+0

不知道listagg(),謝謝。 – Foxy

0

從邏輯上講,你想要做的是將所有事物分組到同一個分類中。你可以通過一個單一的值顯式地把所有的行做到這一點:

select 'NEW_YORK_AREA', 
     --whatever functions you need to aggregate the data here. 
     count(var1), 
     max(var2) 
    from table1 
    where area_code in ('929', '718', '347', '646') 
    group by 1 

但是,如果指的是數據表中的唯一功能是聚合函數,DB2可以讓你忽略group by,它會自動將所有內容組合成一行。以下是等同於上面的查詢:

select 'NEW_YORK_AREA', 
     count(var1), 
     max(var2) 
    from table1 
    where area_code in ('929', '718', '347', '646') 
0

怎麼樣創造一個AREA_CODE_GROUP

AREA_GROUP,AREA_CODE 
'NEW_YORK_AREA','929' 
'NEW_YORK_AREA','718' 
'NEW_YORK_AREA','347' 
'NEW_YORK_AREA','646' 

,你可以加入:

SELECT t.* FROM TABLE1 "t" 
INNER JOIN AREA_CODE_GROUP "g" 
ON t.AREA_CODE = g.AREA_CODE 
WHERE AREA_GROUP = 'NEW_YORK_AREA'