简体   繁体   English

需要帮助“关键字GROUP附近的语法不正确”

[英]Need help with “Incorrect syntax near keyword GROUP”

I don't know what I am doing wrong. 我不知道我在做什么错。 I keep getting incorrect syntax error, it seems like I correct one, then the next line popup. 我不断收到不正确的语法错误,好像我纠正了一个,然后弹出了下一行。 Right now I am getting a "Incorrect syntax near keyword GROUP. I have had a couple of version of my issues on this site. I really appreciate the help so far. I just need that boost to get this report working. Anyone know of any good classes in Minnesota for sql. The books cover the basics, I need the complex sql class. 现在,我在关键字GROUP上收到“语法不正确。在此网站上,我有几个版本的问题。到目前为止,我非常感谢您的帮助。我只需要进行一些改进即可使此报告生效。任何人都知道明尼苏达州sql的良好类。这些书涵盖了基础知识,我需要复杂的sql类。

SELECT fgc, sum(Totpay) as Totpay, Sum(TotChg) as TotChg
from
(                     
    SELECT fgc, sum(pay) as TotPay, 0 as TotChg
    from 
    (
        SELECT fgc, pay,
               CASE 
                   WHEN  [date]<= 30 THEN 'pmt 0-30'      
                   WHEN [date]> 30 AND [date] <= 60 THEN 'pmt 30-60'
                   WHEN [date]> 61 AND [date] <= 90 THEN 'pmt 61-90'
                   WHEN [date]> 91 AND [date] <= 120 THEN 'pmt 91-120'
                   WHEN [date]> 121 AND [date] <= 150 THEN 'pmt 121-150'
                   WHEN [date]> 151 AND [date] <= 180 THEN 'pmt 151-180'
                   ELSE 'pmt 181+' 
               END
        FROM @Pay 
        GROUP BY fgc

        UNION

        SELECT fgc, 0 as TotPay, sum(chg) as TotChg
        from
        (
            SELECT fgc, chg,
                   CASE 
                       WHEN [date]<= 30 THEN 'charge 0-30'      
                       WHEN [date]> 30 AND [date] <= 60 THEN 'charge 30-60' 
                       WHEN [date]> 61 AND [date] <= 90 THEN 'charge 61-90'
                       WHEN [date]> 91 AND [date] <= 120 THEN 'charge 91-120'
                       WHEN [date]> 121 AND [date] <= 150 THEN 'charge 121-150'
                       WHEN [date]> 151 AND [date] <= 180 THEN 'charge 151-180'
                       ELSE 'charge 181+' 
                   END
            FROM @Chg
        )
        GROUP BY fgc 
    )
    GROUP BY fgc

You are not using alias for inline queries. 您没有将别名用于内联查询。 Following not giving me any syntax error. 以下没有给我任何语法错误。

        SELECT fgc, sum(Totpay) as Totpay, Sum(TotChg) as TotChg
        from
        (                     
        SELECT fgc, sum(pay) as TotPay, 0 as TotChg
        from 
            (SELECT fgc, pay,
                CASE 
                WHEN  [date]<= 30 THEN 'pmt 0-30'      
                WHEN [date]> 30 AND [date] <= 60 THEN 'pmt 30-60'
                WHEN [date]> 61 AND [date] <= 90 THEN 'pmt 61-90'
                WHEN [date]> 91 AND [date] <= 120 THEN 'pmt 91-120'
                WHEN [date]> 121 AND [date] <= 150 THEN 'pmt 121-150'
                WHEN [date]> 151 AND [date] <= 180 THEN 'pmt 151-180'
                ELSE 'pmt 181+' 
                END
            FROM @Pay 
            GROUP BY fgc 

            UNION

            SELECT fgc, 0 as TotPay, sum(chg) as TotChg
            from
                (SELECT fgc, chg,
                    CASE 
                    WHEN [date]<= 30 THEN 'charge 0-30'      
                    WHEN [date]> 30 AND [date] <= 60 THEN 'charge 30-60' 
                    WHEN [date]> 61 AND [date] <= 90 THEN 'charge 61-90'
                    WHEN [date]> 91 AND [date] <= 120 THEN 'charge 91-120'
                    WHEN [date]> 121 AND [date] <= 150 THEN 'charge 121-150'
                    WHEN [date]> 151 AND [date] <= 180 THEN 'charge 151-180'
                    ELSE 'charge 181+' 
                    END
                 FROM @Chg) as innerTable2
             GROUP BY fgc 
            ) As innertable1
        GROUP BY fgc
    )  as outerTable

Basically, GROUP BY keyword is used in case using aggregate function, and in order to use it, you must group all column with out using aggregate function on it. 基本上,在使用聚合函数的情况下使用GROUP BY关键字,并且要使用它,必须在不使用聚合函数的情况下对所有列进行分组。

For eg: instead GROUP BY fgc, should use GROUP BY (fgc, pay, aliasName). 例如:代替GROUP BY fgc,应使用GROUP BY(fgc,pay,aliasName)。

Change: 更改:

SELECT fgc, pay, CASE WHEN [date]<= 30 THEN 'pmt 0-30' SELECT fgc,付款,当[date] <= 30 THEN'pmt 0-30'时
WHEN [date]> 30 AND [date] <= 60 THEN 'pmt 30-60' WHEN [date]> 61 AND [date] <= 90 THEN 'pmt 61-90' WHEN [date]> 91 AND [date] <= 120 THEN 'pmt 91-120' WHEN [date]> 121 AND [date] <= 150 THEN 'pmt 121-150' WHEN [date]> 151 AND [date] <= 180 THEN 'pmt 151-180' ELSE 'pmt 181+' END FROM @Pay GROUP BY fgc 当[日期]> 30 AND [日期] <= 60则'pmt 30-60'当[日期]> 61 AND [日期] <= 90则[日期]> 91 AND [日期] <= 120 THEN'pmt 91-120'when [date]> 121 and [date] <= 150 THEN'pmt 121-150'when [date]> 151 AND [date] <= 180 THEN'pmt 151-180' ELSE'pmt 181+'结束于@Pay GROUP BY fgc

into 进入

SELECT fgc, pay, CASE WHEN [date]<= 30 THEN 'pmt 0-30' SELECT fgc,付款,当[date] <= 30 THEN'pmt 0-30'时
WHEN [date]> 30 AND [date] <= 60 THEN 'pmt 30-60' WHEN [date]> 61 AND [date] <= 90 THEN 'pmt 61-90' WHEN [date]> 91 AND [date] <= 120 THEN 'pmt 91-120' WHEN [date]> 121 AND [date] <= 150 THEN 'pmt 121-150' WHEN [date]> 151 AND [date] <= 180 THEN 'pmt 151-180' ELSE 'pmt 181+' END as alias FROM @Pay GROUP BY (fgc, pay, alias) 当[日期]> 30 AND [日期] <= 60则'pmt 30-60'当[日期]> 61 AND [日期] <= 90则[日期]> 91 AND [日期] <= 120 THEN'pmt 91-120'when [date]> 121 and [date] <= 150 THEN'pmt 121-150'when [date]> 151 AND [date] <= 180 THEN'pmt 151-180' ELSE'pmt 181+'END作为别名,来自@Pay GROUP BY(fgc,pay,别名)

Hope this help. 希望能有所帮助。

P/S: tks Gabe for correcting me. P / S:tks Gabe纠正了我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM