将多行组合成一行,列数相同

时间:2014-07-31 15:54:03

标签: database sum rows

我的结果有多行用于特定位置的优先级计数。我想简单地将这些结果转换成一行来显示相同​​的信息。

我目前的代码是:

SELECT t.city_nm as CITY
              ,sum(case when h.priority = 1  then 1 else 0 end)as Priority1
              ,sum(case when h.priority = 2  then 1 else 0 end)as Priority2
              ,sum(case when h.priority = 3  then 1 else 0 end)as Priority3
from SHIPMENT h
INNER JOIN PET_EVT_LOG e 
on h.svc_id = e.svc_id
INNER JOIN LOCATION t
ON t.city_id = e.term_id
INNER JOIN CUSTOMER u
ON h.ship_cust = u.cust_id 
where u.cust_nm = 'CAL NATURAL'
            and e.evt_cd = 'ARRIVAL'
            and e.evt_dt_tm > date(current timestamp) - 7 day
GROUP BY t.city_nm, h.priority;

我的结果如下:

CITY      Priority1  Priority 2  Priority3
Atlanta      7           0          0
Atlanta      0           25         0
Atlanta      0           0          3
Baltimore    3           0          0
Baltimore    0           12         0
Baltimore    0           0          1
Detroit      9           0          0
Detroit      0           32         0
Detroit      0           0          5

如果一行中有一个数字,其他两个字段总是0,所以应该很容易将它们组合起来产生如下结果:

CITY      Priority1  Priority 2  Priority3
Atlanta      7           25         3
Baltimore    3           12         1
Detroit      9           32         5

1 个答案:

答案 0 :(得分:2)

尝试替换

GROUP BY t.city_nm, h.priority;

通过

GROUP BY t.city_nm;