按别名选择查询组

时间:2017-05-04 17:09:27

标签: sql group-by db2 resultset

我有这个问题:

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

是否可以只获得一个名称为' NEW_YORK_AREA'的记录行?包括所有这四个区号?为了更清楚,我们假设您在表格中列出了上面列出的每个区号的4条记录,但是您希望只获得一个带别名' NEW_YOUR_AREA'的结果(行)。我希望很清楚,如果您有任何问题,请告诉我,我会编辑问题。谢谢大家,祝你有个美好的一天。

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

3 个答案:

答案 0 :(得分: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,这是纽约最着名的区号;)

如果您有重复项,则需要在聚合之前使用子查询将其删除。

答案 1 :(得分: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')

答案 2 :(得分: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'