2013-09-05 2 views
0

몇 개의 값을 열로 피벗하려하지만 같은 행에 모든 값을 넣을 수는 없습니다. 피벗 쿼리를 구체적으로 작성하는 방법이 있는지 또는 내가 조인하려는 방식에 문제가있는 경우 확실하지 않습니다.피벗 결과 병합

CARRIAGE_ID PUBLISH_FLAG COUNTER_PRESCRIBED ADT2008 AWT2008 AWE2008 
    10041   1    P   NULL  NULL  36800 
    10041   1    P   NULL  46400 NULL 
    10041   1    P   43000  NULL  NULL 

이를 : 당신은 아마 자신보다 더 잘 알고 있기 때문에, 유래, 나는

select 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,[ADT] AS 'ADT2008' 
    ,[AWT] AS 'AWT2008' 
    ,[AWE] AS 'AWE2008' 
    from [RISSxplr].[dbo].[ADT_MAP_FACT] 
    pivot (max([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
    WHERE [COUNT_YEAR] = 2008  

가 (샘플)처럼 나에게 결과를 제공합니다 ... 내 끔찍한 시도를 생략하고 그것을 설명하려고합니다 모두 같은 CARRIAGE_ID을 공유하고 내가 필요한 것은 다음과 같을 것 때문에 같은 행에있을 모든 이들을위한 것입니다 :

CARRIAGE_ID PUBLISH_FLAG COUNTER_PRESCRIBED ADT2008 AWT2008 AWE2008 
    10041   1    P    43000  46400 36800 

을하지만 그렇게 할 수없는 것. 도와주세요! 언제나처럼 고맙습니다.

편집 : 당신이 원하는 결과를 얻기 위해 집계 함수 (MAX/SUM)를 사용하는 그래서 나는 ADT_MAP_FACT

에서
CARRIAGE_ID COUNT_TYPE COUNT_YEAR FIGURE NUMBER_DAYS PUBLISH_FLAG COUNTER_PRESCRIBED 
    10041  ADT  2008  43000  341   1    P 
    10041  ADT  2009  43400  292   1    P 
    10041  ADT  2010  44000  314   1    P 
    10041  ADT  2011  43300  341   1    P 
    10041  ADT  2012  42700  354   1    P 
    10041  AWE  2008  36800  95   1    P 
    10041  AWE  2009  36800  81   1    P 
    10041  AWE  2010  37900  87   1    P 
    10041  AWE  2011  37000  98   1    P 
    10041  AWE  2012  36500  98   1    P 
    10041  AWT  2008  46400  192   1    P 
    10041  AWT  2009  46900  162   1    P 
    10041  AWT  2010  47100  185   1    P 
    10041  AWT  2011  46900  189   1    P 
    10041  AWT  2012  46600  198   1    P 

답변

1

그냥 집계를 필요로하고 GROUP BY :

SELECT 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,MAX([ADT]) AS 'ADT2008' 
    ,MAX([AWT]) AS 'AWT2008' 
    ,MAX([AWE]) AS 'AWE2008' 
FROM [RISSxplr].[dbo].[ADT_MAP_FACT] 
PIVOT (MAX([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
WHERE [COUNT_YEAR] = 2008 
GROUP BY  [CARRIAGE_ID] 
      ,[PUBLISH_FLAG] 
      ,[COUNTER_PRESCRIBED] 

데모 : 불행하게도 SQL Fiddle

+0

당신의 질의는'10041, 1, P, NULL, NULL, 36800'을 출력 할 것이고, AWT_ flds를 합산 할 필요가 있습니다! – sourcecode

+0

GROUP BY는 위에 게시 된 바이올린에서 작업하는 동안 내 작업을하지 않습니다. 필드에 집계를 필요로 함으로서 당신이 의미하는 바를 모르겠다 (여전히 SQL 비트를 조금씩 배우는 것). 그러나 나는 그것을 시도 할 수있다! 감사! –

+0

데이터를 사용하여 업데이트되었습니다. –

1

에 의해 그룹으로, 첫 번째 행이 발생 표시 샘플 데이터를 추가합니다. 이 바이올린 여기

이 시도

,

select 
    [CARRIAGE_ID] 
    ,[PUBLISH_FLAG] 
    ,[COUNTER_PRESCRIBED] 
    ,sum([ADT]) AS 'ADT2008' 
    ,sum([AWT]) AS 'AWT2008' 
    ,sum([AWE]) AS 'AWE2008' 
    from [RISSxplr].[dbo].[ADT_MAP_FACT] 
    pivot (max([FIGURE]) FOR COUNT_TYPE IN ([ADT],[AWT],[AWE])) AS pCountType 
    WHERE [COUNT_YEAR] = 2008 
group by [CARRIAGE_ID], 
     [PUBLISH_FLAG], 
     [COUNTER_PRESCRIBED]; 

검사 ->fiddle link

+0

같은 일을. 3 개의 값을 같은 행에 가져 오지는 않습니다. 이유는 모르겠습니다. –

+0

MySQL이 아니므로 GROUP BY의 모든 필드가 필요합니다. –

+0

죄송합니다. 죄송합니다. MSSQL과 내가 추가했지만 작동하지 않습니다. 어쩌면 ADT_MAP_FACT 테이블이 구조화 된 방식 일 수도 있고 모르는 경우 일 수도 있습니다. 진짜 혼란. –