微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我已经每月运行此代码一年多了,但由于某种原因,我刚刚通过/聚合错误获取此 SQL 组

如何解决我已经每月运行此代码一年多了,但由于某种原因,我刚刚通过/聚合错误获取此 SQL 组

我定期运行此代码一段时间没有任何错误,但突然看到此错误

消息 8120,级别 16,状态 1,第 95 行 列“#CampaignHistory.maturityDate”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。 Msg 8120,Level 16,State 1,Line 96 列“#CampaignHistory.maturityDate”在选择列表中无效,因为它既不包含在聚合函数中也不包含在 GROUP BY 子句中。

这是我正在使用的代码。此代码上方的所有内容都运行良好,没有错误

SELECT CASE WHEN maturityDate <= '2021-01-31' THEN 'Closed'
                    WHEN maturityDate >= '2021-02-01' THEN 'Active' END AS Campaign,COUNT (disTINCT CustomerID) AS Peeps
       FROM #CampaignHistory
GROUP BY CASE WHEN maturityDate <= '2020-01-31' THEN 'Closed'
                    WHEN maturityDate >= '2021-02-01' THEN 'Active' END;

image of code and error

解决方法

SELECT 子句和 GROUP BY 子句中的表达式不同:第一个提到 2021-01-31,第二个提到 2020-01-31。

为避免重复代码并防止出现此类拼写错误,您可以使用以下查询之一:

SELECT Campaign,COUNT(DISTINCT CustomerID) AS Peeps
FROM (
    SELECT CustomerID,CASE
            WHEN MaturityDate <= '2021-01-31' THEN 'Closed'
            WHEN MaturityDate >= '2021-02-01' THEN 'Active'
        END AS Campaign
    FROM #CampaignHistory
) x GROUP BY Campaign

SELECT      Campaign,COUNT(DISTINCT CustomerID) AS Peeps
FROM        #CampaignHistory
CROSS APPLY (
    SELECT  CASE
                WHEN MaturityDate <= '2021-01-31' THEN 'Closed'
                WHEN MaturityDate >= '2021-02-01' THEN 'Active'
            END AS Campaign
) x
GROUP BY x.Campaign

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。