【问题标题】:getting error while convert mysql query to sql server将mysql查询转换为sql server时出错
【发布时间】:2018-02-05 12:27:25
【问题描述】:

我正在努力将 mysql 查询转换为 sql 查询,但是我遇到了错误,我对 sql server 了解不多,在这里我发布了我的两个查询,谁能帮我解决这个问题查询,我收到错误

Each GROUP BY expression must contain at least one column that is not an outer reference.

Mysql 查询(在 mysql 服务器中工作正常):

SELECT 'Ending Episodes' as display_name, MonthEnd as MonthStart, MonthEnd as MonthEnd, AVG(FullHHRG) as FullHHRG, 
AVG(LUPAAdj) as LUPAAdj, AVG(OutlierAdd) as OutlierAdd, AVG(UpDownCode) as UpDownCode, AVG(Sequester) as Sequester, 
AVG(NetHHRG) as NetHHRG, count(tb_Episode.id) as total 
FROM tb_Episode 
WHERE EpEnd is not null AND EpEnd >= '01-01-01' AND EpEnd < '01-01-01' AND tb_Episode.CustID = '27' 
GROUP BY display_name, MonthEnd ORDER BY tb_Episode.MonthEnd asc

转换后的 SQL 查询(出现错误)

SELECT 'EndingEpisodes' as display_name, MonthEnd as MonthStart, MonthEnd as MonthEnd, AVG(FullHHRG) as FullHHRG, 
AVG(LUPAAdj) as LUPAAdj, AVG(OutlierAdd) as OutlierAdd, AVG(UpDownCode) as UpDownCode, AVG(Sequester) as Sequester, 
AVG(NetHHRG) as NetHHRG, count(DISTINCT tb_Episode.id) as total 
FROM tb_Episode 
WHERE EpEnd is not null AND EpEnd >= '01-01-01' AND EpEnd < '01-01-01' AND CustID = '27' 
GROUP BY MonthEnd,FullHHRG,LUPAAdj,OutlierAdd,UpDownCode,Sequester,NetHHRG 
ORDER BY MonthEnd asc

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我想你只想要group by中的monthend

SELECT 'EndingEpisodes' as display_name, MonthEnd as MonthStart, MonthEnd as MonthEnd,
       AVG(FullHHRG) as FullHHRG, AVG(LUPAAdj) as LUPAAdj, AVG(OutlierAdd) as OutlierAdd,
       AVG(UpDownCode) as UpDownCode, AVG(Sequester) as Sequester, 
       AVG(NetHHRG) as NetHHRG, count(DISTINCT tb_Episode.id) as total 
FROM tb_Episode 
WHERE EpEnd is not null AND
      EpEnd >= '01-01-01' AND
      EpEnd < '01-01-01' AND
     CustID = '27' 
GROUP BY MonthEnd
ORDER BY MonthEnd asc;

SQL Server 无法识别GROUP BY 子句中的列别名,所以问题是无法识别display_name。它是一个常数,所以没有区别。

还请注意,此版本将在 MySQL 中运行。您可能需要注意日期格式。

【讨论】:

    【解决方案2】:

    我认为您的问题出在group by

    SELECT 
        'EndingEpisodes' as display_name, 
        MonthEnd as MonthStart, 
        MonthEnd as MonthEnd, 
        AVG(FullHHRG) as FullHHRG, 
        AVG(LUPAAdj) as LUPAAdj, 
        AVG(OutlierAdd) as OutlierAdd, 
        AVG(UpDownCode) as UpDownCode, 
        AVG(Sequester) as Sequester, 
        AVG(NetHHRG) as NetHHRG, 
        count(DISTINCT tb_Episode.id) as total 
    FROM tb_Episode 
    WHERE EpEnd is not null AND EpEnd >= '01-01-01' AND EpEnd < '01-01-01' AND tb_Episode.CustID = '27' 
    GROUP BY MonthEnd
    ORDER BY MonthEnd asc
    

    【讨论】:

    • 不客气 :)。当我在 mysql 和 mssql 之间切换时,我有时会混淆语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2015-03-21
    • 2019-12-07
    • 2012-07-15
    • 2015-11-29
    • 2016-07-29
    相关资源
    最近更新 更多