我正在尝试根据不同的条件执行多次计数,并按年份和月份对结果进行分组。
我有一个投诉表,我想统计:
我使用多个嵌套的选择语句来对每个场景进行计数,并且它们独立工作。 但是,当我运行整个查询时,出现错误: 列“db.CustomerComplaints.id_Contact”在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。
请参阅下面我的代码:
SELECT
YEAR(ReceivedDate) AS 'Year',
FORMAT(ReceivedDate, 'MMMM') AS 'Month name',
COUNT(*) AS 'Received Complaints'
,
(SELECT COUNT(*)
FROM db.CustomerComplaints t
WHERE t.status = 'Resolved'
AND t.id_Contact = cc.id_Contact
) AS 'Resolved Complaints'
,
(
SELECT COUNT(*)
FROM db.CustomerComplaints t
WHERE t.status = 'New'
AND t.id_Contact = cc.id_Contact
) AS 'New Complaints'
FROM hug2.CustomerComplaints cc
LEFT JOIN hug2.ReferralUpdates r
ON cc.id_Contact = r.Reference
WHERE r.ReferenceCode = 'Project1'
GROUP BY YEAR(ReceivedDate), FORMAT(ReceivedDate, 'MMMM')
我想要得到的结果是:
年份 | 月 | 收到投诉 | 已解决的投诉 | 新投诉 |
---|---|---|---|---|
2023 | 三月 | 5 | 5 | 0 |
2023 | 四月 | 15 | 10 | 5 |
2024 | 三月 | 7 | 4 | 3 |
我希望我的问题有意义。
您可以尝试将子查询移至连接,如下所示:
SELECT
YEAR(ReceivedDate) AS 'Year',
FORMAT(ReceivedDate, 'MMMM') AS 'Month name',
COUNT(*) AS 'Received Complaints',
rc.[Resolved Complaints],
nc.[New Complaints]
FROM hug2.CustomerComplaints cc
LEFT JOIN hug2.ReferralUpdates r ON cc.id_Contact = r.Reference
left join
(
SELECT t.id_Contact,
COUNT(*) AS 'Resolved Complaints'
FROM db.CustomerComplaints t
WHERE t.status = 'Resolved'
) rc on rc.id_Contact = cc.id_Contact
left join
(
SELECT t.id_Contact,
COUNT(*) as 'New Complaints'
FROM db.CustomerComplaints t
WHERE t.status = 'New'
) nc on nc.id_Contact = cc.id_Contact
WHERE r.ReferenceCode = 'Project1'
GROUP BY
YEAR(ReceivedDate),
FORMAT(ReceivedDate, 'MMMM'),
rc.[Resolved Complaints],
nc.[New Complaints]