2011-09-08 3 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 *의 대답에 동의하지만, 당신의 요지는 유효하다. 나는 당신이 대답을해야한다고 생각합니다. UNION의 왼쪽 부분은 오른쪽 부분의 패턴을 따라야하지만 그렇지 않은 부분은 분명히 따라야합니다. –

+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 지불 [일] < = 30 THEN CASE '는 PMT 0-30'
[일자]> 30 AND THEN [일자] < = 60 'PMT 30-60 ' 언제 [date]> 61 AND [date] < = 90 그 다음에 pmt 61-90' 언제 [date]> 91 AND [date] < = 120 그 다음에 pmt 91-120 ' WHEN [date ]> 121 AND [date] < = 150 THEN 'pmt 121-150' 언제 [date]> 151 AND [date] < = 180 THEN 'pmt 151-180' ELSE 'PMT 181+'END FGC

BY @Pay GROUP FROM

[일자] < = 30 THEN

SELECT FGC, 페이 CASE 으로 '는 PMT 0-30'
언제 [날짜]> 30 AND [날짜] < = 60 THEN 'pmt 30-60' 언제 [날짜]> 61 AND [날짜] < = 90 THEN 'pmt 61-90' WHEN [date]> 91 AND [ 날짜] < = 120 THEN 'pmt 91-120' WHEN [날짜]> 1 21 [일] < = 150 THEN [일자]> 151 THEN [일자] < = 180 '이 121-150 PMT'는 PMT 151-180 ' ELSE'PMT 181+ '별명 같은 END FROM @ 지불 GROUP BY (fgc, 지불, 별칭)

희망이 도움이됩니다.

P/S : tks 날 고쳐 주겠다.

+1

-1; 당신은'TotPay'에 대해 틀렸어. 그가 선택한 칼럼은 아닙니다. – Gabe

관련 문제