我有两个表,我正在尝试编写一个包含多个 CASE 语句的 GROUP BY 子句,以便将数据分组为每个客户端的一行,而不是每个客户端的多行。
这是 tblClient 和 tblServices 表的快速浏览:
这些是我目前的结果:
这是我想要的结果:
我写了两个查询,两者都给出了当前结果,而不是我想要的结果:
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
请求评论摘要:如果您希望每个客户和日期有一个结果行,则按客户和日期分组。
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;