2013-06-11 4 views
1

수리를 추적하는 시스템을 고려하십시오. 나는 고객 데이터와 공통 ID 키가있는 테이블을 가지고있다. 두 번째 테이블에는 각 ID 키에 사용 된 복구 파트 유형과 사용 된 숫자가 표시되는 열이 있습니다. 이들의 정의는 다음과 같습니다 :기존 열의 데이터를 기반으로 새 열 만들기

order_information 
order_id | cust_last_name 
465   Smith 
899   Williams 
512   Johnson 
345   Fenton 
122   Bowles 
944   Cooper 

parts_usage 
order_id | part_type | part_quantity 
465   Part 1  5 
465   Part 2  4 
899   Part 1  2 
899   Part 2  8 
899   Part 3  6 
512   Part 3  1 
345   Part 2  4 
345   Part 3  5 
122   Part 2  3 
944   Part 1  2 

나는 부분의 조각과 같이 세분화 돌아갑니다보고에 대한 쿼리를 실행하고 싶습니다 :

order_id | Part 1 | Part 2 | Part 3 | Total 
465   5   4      9 
899   2   8   6   16 
512        1   1 
345      4   5   9 
122      3      3 
944   2        2 

이 가능하므로 쿼리와 함께이 작업을 수행하는 것입니다 내 보고서에 각 수리 티켓에 사용 된 각 부품의 수를 표시 할 수 있습니까?

여기서 알 수 있듯이 각 order_id에는 여러 부품 유형과 고유 수량이있을 수 있습니다. 나는 서로 다른 부품 유형 (세 가지가 합계)을 세 개의 분리 된 열로 나누고 합계를 order_id으로 나열하려고합니다.

+0

필요한 것은 테이블을 피벗하는 것입니다. 예를 들어 SQL Server에는 피벗 명령이 있습니다. http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx –

+2

사용중인 RDBMS는 무엇입니까? SQL은 많은 데이터베이스 시스템에서 사용되는 언어 일뿐입니다. 찾고있는 솔루션은 공급 업체마다 다를 수 있습니다. – GarethD

+0

아시다시피 파트가 세 개 뿐이지 만 Part1'과 같은 스타일의 합계 탭 (part_type = 'part1'일 때 part_quantity 끝)이 작동해야합니다. 그렇지 않으면보다 정교한 솔루션이 될 것입니다. @GarethD 상태와 관련된 공급 업체. –

답변

1
select order_id, [Part 1], [Part 2], [Part 3], Total 
from 
(
    select oi.order_id 
    , part_type 
    , part_quantity 
    , Total = sum(part_quantity) over (partition by oi.order_id) 
    from order_information oi 
    inner join parts_usage pu on oi.order_id = pu.order_id 
) as parts 
pivot 
(
    sum(part_quantity) for part_type in ([Part 1], [Part 2], [Part 3]) 
) as pvt 
order by order_id 

이 작품은 저에게 좋습니다.

결과 집합을 order_id으로 주문했습니다. 예제 결과에는 특정 순서가있는 것처럼 보이지 않지만 질문 세부 사항에 언급되어 있습니다.

키가 PIVOTSUM 집계 창 기능을 결합하는 것임을 알 수 있습니다.

SQL Fiddle with demo.

관련 문제