GROUP BY 不适用于多个 Case 语句和左连接

问题描述 投票:0回答:1

我有两个表,我正在尝试编写一个包含多个 CASE 语句的 GROUP BY 子句,以便将数据分组为每个客户端的一行,而不是每个客户端的多行。

这是 tblClient 和 tblServices 表的快速浏览:

tblClient

tblServices

这些是我目前的结果:

Current Results

这是我想要的结果:

Desired Results

我写了两个查询,两者都给出了当前结果,而不是我想要的结果:

SELECT 
    c.ClientID, CreateDate,
    MAX (CASE WHEN c.ServiceID = 1 THEN 1 ELSE 0 END) AS ‘Kitchen’,
    MAX (CASE WHEN c.ServiceID = 2 THEN 1 ELSE 0 END) AS ‘Living Room’,
    MAX (CASE WHEN c.ServiceID = 3 THEN 1 ELSE 0 END) AS ‘Dining Room’,
    MAX (CASE WHEN c.ServiceID = 4 THEN 1 ELSE 0 END) AS ‘Family Room’
FROM 
    tblClient c 
LEFT JOIN 
    s.tblServices s ON s.ServiceID = s.ServiceID
GROUP BY
    c.ClientID, CreateDate, c.ServiceID 
SELECT 
    c.ClientID, CreateDate,
    (CASE WHEN c.ServiceID = 1 THEN 1 ELSE 0 END) AS ‘Kitchen’,
    (CASE WHEN c.ServiceID = 2 THEN 1 ELSE 0 END) AS ‘Living Room’,
    (CASE WHEN c.ServiceID = 3 THEN 1 ELSE 0 END) AS ‘Dining Room’,
    (CASE WHEN c.ServiceID = 4 THEN 1 ELSE 0 END) AS ‘Family Room’
FROM 
    tblClient c 
LEFT JOIN 
    s.tblServices s ON s.ServiceID = s.ServiceID
GROUP BY
    c.ClientID, CreateDate, 
    CASE WHEN c.ServiceID = 1 THEN 1 ELSE 0 END,
    CASE WHEN c.ServiceID = 2 THEN 1 ELSE 0 END, 
    CASE WHEN c.ServiceID = 3 THEN 1 ELSE 0 END,
    CASE WHEN c.ServiceID = 4 THEN 1 ELSE 0 END
sql group-by case
1个回答
0
投票

请求评论摘要:如果您希望每个客户和日期有一个结果行,则按客户和日期分组。

SELECT 
    c.clientid, c.createdate,
    MAX (CASE WHEN c.serviceid = 1 THEN 1 ELSE 0 END) AS "Kitchen",
    MAX (CASE WHEN c.serviceid = 2 THEN 1 ELSE 0 END) AS "Living Room",
    MAX (CASE WHEN c.serviceid = 3 THEN 1 ELSE 0 END) AS "Dining Room",
    MAX (CASE WHEN c.serviceid = 4 THEN 1 ELSE 0 END) AS "Family Room"
FROM tblclient c 
GROUP BY c.clientid, c.createdate
ORDER BY c.clientid, c.createdate;
© www.soinside.com 2019 - 2024. All rights reserved.