2013-05-09 1 views
0

필자는이 하나의 쿼리에 대해 SQL Developer에서 피벗 함수를 사용하는 방법을 알아 내려고 노력했습니다. 나는 누군가가 나를 도울 수 있기를 바랬으므로 이전 게시물에서 정말 도움이되는 것을 찾지 못했습니다.알 수없는 값을 가진 SQL Developer 피벗을 하나의 열로 변환

나는 현재 선택해야 데이터의 작은 부분은 다음과 같다 : (가) 위가되도록

| ID | NAME | COUNTRY | STATE | DATE | TYPE | AMOUNT | 
+----+------+---------+-------+------+--------+--------+ 
| 1 | John | U.S. | TX | 345 | Red |  76 | 
| 1 | John | U.S. | TX | 345 | Blue | 357 | 
| 2 | Alex | U.S. | CO | 654 | Red | 231 | 
| 2 | Alex | U.S. | CO | 654 | Black |  90 | 
| 2 | Alex | U.S. | CO | 654 | Blue | 123 | 
| 2 | Alex | U.S. | CO | 654 | Red | 456 | 
| 1 | John | U.S. | TX | 345 | Gold |  60 | 
| 1 | John | U.S. | TX | 345 | Silver |  70 | 

내가 자신의 컬럼으로 각각 다른 유형이 필요합니다 :

| ID | NAME | COUNTRY | STATE | DATE | RED | BLUE | BLACK | OTHER | 
+----+------+---------+-------+------+-----+------+--------+--------+ 
| 1 | John | U.S. | TX | 345 | 76 | 357 | (null) | 130 | 
| 2 | Alex | U.S. | CO | 654 | 687 | 123 | 90  | (null) | 

내 데이터에는 얼마나 많은 '기타'색상이 있는지, 또는 모두가 무엇인지는 알 수 없습니다. (단, 그 숫자는 분명히 한정되어 있습니다)

누구나 제공 할 수있는 도움에 감사드립니다. 이걸로 나.

+0

를 참조하십시오 : 당신이 오라클 11g를 사용하는 경우, 당신은 피벗 기능을 사용할 수 있습니다). 보편적으로 지원되지 않는 언어 나 제품 기능을 이용하는 대답이있을 수 있습니다. 또한 특정 RDBMS로 태그를 달아서 질문에 답하는 것이 더 적합한 사람들로부터주의를받을 수 있습니다. – Taryn

+0

얼마나 많은 데이터가 있습니까? 그것은 단지 몇 1000s 경우 엑셀에서 할 쉬울 수도 있습니다 ... – Aprillion

+0

(** 1 **) 각 이름에 대해 'DATE'값이 일치하는 것은 우연의 일치입니까? (** 2 **) 명시 적으로 나열하지 않은 모든 색상에 대해 ** 단일 ** "기타"열을 원합니다. 맞습니까? –

답변

5

사용중인 Oracle 버전을 지정하지 않았습니다. 당신은 (오라클, SQL 서버, MySQL은, 등 적절한 태그를 추가하여 타겟팅하는 RDBMS를 지정하십시오

select * 
from 
(
    select id, name, country, state, "DATE", amount, 
    case 
     when type in ('Red', 'Blue', 'Black') then type 
     else 'Other' end type 
    from yt 
) 
pivot 
(
    sum(amount) 
    for type in ('Red', 'Blue', 'Black', 'Other') 
); 

SQL Fiddle with Demo

+0

Oracle3을 사용하고 있습니다. 귀하의 피벗 함수 방법은 매우 효율적으로 보이지만, 불행히도 나를 위해 작동하지 않습니다. 하지만 고마워! – DrNerj

+4

@DrNerj 절대 안돼! Oracle 3을 실행하는 방법은 없습니다! 오라클 3은 81 년에 나왔습니다. 커다란 기능은 Commitable Transactions입니다. 귀하의 오라클 버전은 30 세입니다. 나는 그것이 업그레이드 할 때라고 생각한다. – Zane

+0

대부분 DrNerj는 SQL * Developer 3 (현재 주요 개정판)을 의미합니다. – Ben

5

나는 게으른 당신에게 CASE 표현식을 사용하여이 작업을 수행하는 방법을 보여주지 :

난 당신이 RDBMS를 지정하는 경우, 적어도 하나 개의 훨씬 더 완전한 답변이 될 것이라고 확신합니다
SELECT ID, 
     NAME, 
     COUNTRY, 
     STATE, 
     DATE, 
     SUM(CASE WHEN TYPE = 'Red' THEN AMOUNT END) RED, 
     SUM(CASE WHEN TYPE = 'Blue' THEN AMOUNT END) BLUE, 
     SUM(CASE WHEN TYPE = 'Black' THEN AMOUNT END) Black, 
     SUM(CASE WHEN TYPE NOT IN ('Red','Blue','Black') THEN AMOUNT END) OTHER 
FROM YourTable 
GROUP BY ID, 
     NAME, 
     COUNTRY, 
     STATE, 
     DATE 

이것을하는 다른 방법.

+0

나는 합계로'sum'을 제안 할 것입니다. 여기에 데모가 있습니다 - http://www.sqlfiddle.com/#!2/d08d1/4 – Taryn

+0

@bluefeet 생각해 보았습니다. 그러나 각 유형에 대해 단 하나의 행만 있다고 가정하기로 결정했습니다. 그리고 이제는 'OTHER'컬럼에서 작동하지 않는다는 것을 알게되었습니다. 나는 바보이지만 여전히 자신의 질문을 업데이트 할 때까지 기다리고 있으므로보다 완벽한 답변을 볼 수 있습니다 :-) – Lamak

+0

@Lamak 대단히 감사합니다. 매우 도움이되었습니다. 그 방법은 꽤 잘 작동하는 것 같습니다. 나는 당신의 포스트를 업보트 할 것이지만 그렇게하기에는 충분한 명성이 없다. – DrNerj

관련 문제