Нужна помощь с "Неверный синтаксис рядом с ключевым словом GROUP" - PullRequest
0 голосов
/ 08 сентября 2011

Я не знаю, что я делаю не так.Я получаю неправильную синтаксическую ошибку, кажется, что я исправляю одну, а затем появляется следующая строка.Прямо сейчас я получаю "Неверный синтаксис рядом с ключевым словом 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

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Вы не используете псевдоним для встроенных запросов. Следующее не дает мне никакой синтаксической ошибки.

        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
0 голосов
/ 08 сентября 2011

По сути, ключевое слово GROUP BY используется в случае использования функции агрегирования, и для ее использования необходимо сгруппировать весь столбец без использования функции агрегирования.

Например, вместо GROUP BY fgc, следует использовать GROUP BY (fgc, pay, aliasName).

Изменение:

ВЫБЕРИ ФГК, плати, ДЕЛО КОГДА [дата] <= 30, ТО «вечера 0-30» <br> КОГДА [дата]> 30 И [дата] <= 60 ТО «pmt 30-60» КОГДА [дата]> 61 И [дата] <= 90, то «pmt 61-90» КОГДА [дата]> 91 И [дата] <= 120, ТО «ПМТ 91-120» КОГДА [дата]> 121 И [дата] <= 150, ТО «ПМТ 121-150» КОГДА [дата]> 151 И [дата] <= 180, ТО «ПМТ 151-180» ELSE 'pmt 181+' КОНЕЦ ОТ @Pay GROUP BY FGC </p>

в

ВЫБЕРИ ФГК, плати, ДЕЛО КОГДА [дата] <= 30, ТО «вечера 0-30» <br> КОГДА [дата]> 30 И [дата] <= 60 ТО «pmt 30-60» КОГДА [дата]> 61 И [дата] <= 90, то «pmt 61-90» КОГДА [дата]> 91 И [дата] <= 120, ТО «ПМТ 91-120» КОГДА [дата]> 121 И [дата] <= 150, ТО «ПМТ 121-150» КОГДА [дата]> 151 И [дата] <= 180, ТО «ПМТ 151-180» ELSE 'pmt 181+' КОНЕЦ как псевдоним ОТ @Pay GROUP BY (fgc, pay, alias) </p>

Надеюсь, эта помощь.

P / S: Ткс Гейб за поправку.

...