2011-08-26 7 views
2

, 당신은 내가 약 5 ~ 6 시간 문제 얻을 수 있도록 내가 할 수 아니에요, 그래서 더 큰 SQL 쿼리와 숙련 매우 높은 아니에요 나에게 을 도울 수 있습니다 조인 :/PIVOT 문제와 나는 희망

을 그것은가 집계 함수 나 GROUP BY 절 중 하나에 포함되지 않기 때문에

열 'pvtMonth.1'선택 목록에서 유효 입니다 : SQL 서버 2008에서이 오류의 얻을.

'j_sumzeit'열 이름이 잘못되었습니다.

'j_sumzeit'열 이름이 잘못되었습니다.

내 쿼리 : 몇 가지 예를 들어 데이터

테이블 구조가 매우 나쁜 그러나 그들은 외부 회사로부터이기 때문에 내가 그들을 변경할 수 없습니다와

SELECT 
    kostenstelle_nr, 
    kostenstelle_name, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mrz, 
    [4] AS Apr, 
    [5] AS Mai, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Okt, 
    [11] AS Nov, 
    [12] AS Dez, 
    SUM (j_sumzeit) AS [2011], 
    SUM (vj_sumzeit) AS [2010], 
    ROUND(100 - ((vj_sumzeit/j_sumzeit) *100) , 0) AS [diff] 
FROM 
(
    SELECT 
     dbo.kostenstelle.kostenstelle_nr, 
     dbo.kostenstelle.kostenstelle_name, 
     SUM (j_sumzeitpromo) AS j_sumzeit, 
     SUM (vj_sumzeitpromo) AS vj_sumzeit, 
     MONTH (j_datum) AS TMonth 
    FROM 
     dbo.kostenstelle 

    LEFT JOIN 
    (
     SELECT 
      dbo.def.def_kstnr AS j_kstnr, 
      dbo.def.def_datum AS j_datum, 
      SUM (dbo.def.def_zeit) AS j_sumzeitpromo, 
      COUNT (dbo.def.def_zeit) AS j_anzahl 
     FROM 
      dbo.def 
     WHERE 
      YEAR (dbo.def.def_datum) = 2011 
      AND dbo.def.def_auknr > 215 
     GROUP BY 
      dbo.def.def_kstnr, 
      dbo.def.def_datum 
    ) jahr 
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr 

    LEFT JOIN 
    (
     SELECT 
      dbo.def.def_kstnr AS vj_kstnr, 
      dbo.def.def_datum AS vj_datum, 
      SUM (dbo.def.def_zeit) AS vj_sumzeitpromo, 
      COUNT (dbo.def.def_zeit) AS vj_anzahl 
     FROM 
      dbo.def 
     WHERE 
      YEAR (dbo.def.def_datum) = 2010 
      AND dbo.def.def_auknr > 215 
     GROUP BY 
      dbo.def.def_kstnr, 
      dbo.def.def_datum 
    ) vorjahr 
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr 

    GROUP BY 
     dbo.kostenstelle.kostenstelle_nr, 
     dbo.kostenstelle.kostenstelle_name, 
     MONTH (j_datum) 
) source 
PIVOT 
(
    SUM(j_sumzeit) 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 
GROUP BY 
    kostenstelle_nr, 
    kostenstelle_name 

테이블 .

|-----------------------------------------------| 
| def_kstnr | def_zeit | def_datum | def_auknr | 
|-----------------------------------------------| 
| 100  | 3.2  | 2011-11-02 | 245  | 
| 110  | 2.8  | 2011-02-03 | 265  | 
| 120  | 5.4  | 2011-11-04 | 250  | 
| 130  | 2.4  | 2011-08-05 | 280  | 
| 140  | 4.9  | 2011-09-06 | 300  | 
| 150  | 1.5  | 2011-10-07 | 320  | 
| 160  | 2.6  | 2011-12-08 | 450  | 
|-----------------------------------------------| 

|-------------------------------------------------------| 
| kostenstelle_id | kostenstelle_nr | kostenstelle_name | 
|-------------------------------------------------------| 
| 1    | 245    | KstTst1   | 
| 2    | 265    | KstTst1   | 
| 3    | 250    | KstTst1   | 
| 4    | 280    | KstTst1   | 
| 5    | 300    | KstTst1   | 
| 6    | 320    | KstTst1   | 
| 7    | 450    | KstTst1   | 
|-------------------------------------------------------| 

결과

|--------------------------------------------------------------------------------------------------------| | def_kstnr | Jan | Feb | Mrz | Apr | Mai | Jun | Jul | Aug | Sep | Okt | Nov | Dez | 2011 | 2010 | diff | |--------------------------------------------------------------------------------------------------------| | 100 | 8.4 | 3.4 | 2.7 | 9.5 | 3.5 | 7.4 | 3.4 | 1.2 | 7.5 | 3.4 | 3.2 | 7.5 | 61.1 | 47.5 | 22 | | 110 | 4.4 | 2.8 | 6.5 | 2.5 | 1.4 | 2.4 | 4.4 | 3.7 | 2.4 | 7.7 | 1.7 | 6.4 | 46.3 | 32.2 | 30 | ... |--------------------------------------------------------------------------------------------------------| 

가 대단히 감사합니다 (위의 예제 데이터에서 출발 할 수 번호)이
과 같아야합니다. 더 많은 정보가 필요하다면 - 나는 그들에게 즐거움을 줄 것이다 :

+0

'GROUP'을 사용하여 선택한 항목 및 집계에 많은 문제가 있습니다. 나는 당신이 그 오류 코드를 얻지 못했지만 놀랐다. 그러나 나는 일단 다른 문제들이 처리되면 당신이 생각할 것이다. – JNK

+0

오류가 발생하면 찾아서 해결할 수 있기를 바랍니다. 감사합니다. – Ueli

답변

0

초기 테이블 구조를 보지 않고는 말하기가 어렵다. SELECT에 "j_sumzeit"열을 삽입 해보십시오 (첫 번째 FROM 바로 뒤에).

+0

안녕하세요 파벨 네피 도브! 또한 오류 "잘못된 열 이름 'j_sumzeit'."이 나타납니다. ". 나는 테이블 구조와 더 많은 정보로 포스트를 편집했다. 도와 줘서 고마워! – Ueli

+0

원하는 결과 테이블에 dbo.kostenstelle의 정보가 없습니다. 우리는 왜 그것을 가지고 있어야합니까? –