我有这个问题:
SELECT * FROM TABLE1 WHERE AREA_CODE IN ('929', '718', '347', '646') GROUP BY AREA_CODE
是否可以只获得一个名称为' NEW_YORK_AREA'的记录行?包括所有这四个区号?为了更清楚,我们假设您在表格中列出了上面列出的每个区号的4条记录,但是您希望只获得一个带别名' NEW_YOUR_AREA'的结果(行)。我希望很清楚,如果您有任何问题,请告诉我,我会编辑问题。谢谢大家,祝你有个美好的一天。
更新:要求已更改,不再需要。感谢大家的帮助! :)
答案 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'