2011-09-08 74 views
0

我不知道我在做什么错。我不断得到不正确的语法错误,看起来像我纠正一个,然后下一行弹出。现在我得到了一个“关键词GROUP附近的错误语法,我在这个网站上遇到了几个版本的问题,我非常感谢迄今为止的帮助,我只是需要提高这个报告的工作效率。良好的班在明尼苏达州的SQL。这些书涵盖了基础知识,我需要的复杂的SQL类。需要关于“关键字GROUP附近的错误语法”的帮助

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 
+1

我修复了你的格式。现在应该明白你的问题是什么。我的猜测是,它不正确放置括号。 – Gabe

+0

@加贝:虽然我同意* kaps *的回答,你的观点也是有效的。我认为你应该让它成为答案。现在显而易见的是,联盟的左边部分应该遵循正确部分的模式,而不是。 –

+0

把这个问题挽回到一个值得回答的问题的人的大道具。你们真棒。 –

回答

3

您未使用别名嵌入式查询。继不给我任何语法错误。

 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

基本上,在使用聚合函数的情况下使用GROUP BY关键字,并且为了使用它,必须使用集合函数对所有列进行分组。

例如:改为GROUP BY fgc,应使用GROUP BY(fgc,pay,aliasName)。

变化:

SELECT FGC,支付, CASE WHEN [日期] < = 30 THEN 'PMT 0-30'
WHEN [日期]> 30 AND [日期] < = 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

SELECT FGC,支付, CASE WHEN [日期] < = 30 THEN 'PMT 0-30'
当[日期]> 30和[日期] < = 60 THEN'pmt 30-60' WHEN [date]> 61 AND [date] < = 90 THEN'pmt 61-90' WHEN [date]> 91 AND [日期] < = 120 THEN'pmt 91-120' WHEN [date]> 1 21 AND [date] < = 150 THEN'pmt 121-150' WHEN [date]> 151 AND [date] < = 180 THEN'pmt 151-180' ELSE'pmt 181+' END as alias FROM @支付 GROUP BY(fgc,支付,别名)

希望得到这个帮助。

P/S:tks Gabe纠正我。

+1

-1;你错了'TotPay'。这不是他选择的专栏,而是一个常数! – Gabe

相关问题