在表格中给出以下数据:
RIDER_ID, DEST1, DEST2, DEST3
'864', '387', '24', NULL
'864', '24', '1', NULL
'864', '732', '1', NULL
以及以下声明:
SELECT DISTINCT(RIDER_ID), DEST1, DEST2, DEST3,
(CASE WHEN START_DATE BETWEEN '2018-11-01 00:00:00' AND ' 2018-11-01 23:59:59 ' THEN COUNT(DEST1) + COUNT( DEST2) + COUNT(DEST3) END) AS '2018-11-01',
(CASE WHEN START_DATE BETWEEN '2018-11-02 00:00:00' AND ' 2018-11-02 23:59:59 ' THEN COUNT(DEST1) + COUNT( DEST2) + COUNT(DEST3) END) AS '2018-11-02'
FROM SCHEDULE
WHERE START_DATE BETWEEN '2018-11-01 00:00:00' AND '2018-11-02 23:59:59' AND RIDER_ID = 864
GROUP BY START_DATE, RIDER_ID, DEST1, DEST2, DEST3
结果如下:
RIDER_ID, 2018-11-01, 2018-11-02
'864', '2', NULL
'864', '2', NULL
'864', NULL, '2'
然而,我想要的是:
RIDER_ID, 2018-11-01, 2018-11-02
'864', '4', '2'
所以第864号车手在第一天一共有4个目的地,第二天有2个目的地。当然,每个月的每一天和每个车手id都会有专栏。
换句话说,每个车手id只有一条记录,其中日期列包含目的地的总数。字段中的值是索引值,在这里无关紧要。只需计算是否有值(即每个车手的id和日期的目的地总数)。
到目前为止,我还没有想出正确的说法。啊。
2条答案
按热度按时间w3nuxt5m1#
对于条件聚合,通常需要聚合函数中的条件,如下所示:
另外,在写这个的时候,我注意到sum可能更适合你想要的。
旁注:
CASE
它比IF()
,并且可以嵌套。为了使例子更清楚,我使用了if。cfh9epnr2#
我认为只要从字段列表和groupby子句中删除dest1、dest2、dest3,就应该得到想要的结果。
distinct(附加id)没有用,因为您已经在按该字段分组。
但是,即使结构略有不同,您也可能会得到类似的结果:
这将以以下格式返回数据: