2017-05-04 44 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'