2017-05-03 2 views
-4

나는 내 문제는 가능한 한 중복 질문보다 약간 독특한 생각의 형식은 다음과SQL 피벗 2 열

Table View

의 테이블을 가지고 있고, 나는 201601 반복을 얻으려고 ... 두 개의 측정 항목 주문 및 비용에 대한 201652 열입니다.

+3

가능한 중복 http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot -in-sql-server) – Ben

+0

어떤 데이터베이스를 사용하고 있습니까? – Taryn

+0

SQL Server 12를 사용하고 있습니다. – user2827224

답변

0

이것은 독점적 인 PIVOT() 기능에 의존하지 않는 모든 데이터베이스 (SQL Server 포함)에 대한 접근 방법입니다. 그러한 예에서 52 주 동안 그렇게하기에는 조금 이상합니다. (그리고 사실을 말해주기 위해 105 개의 결과 컬럼이 실제로 보고서를 읽는 사람에게 이익이되는 최상의 결과는 아닙니다.) 이 예제에서, 나는 주보다는 오히려 1 년의 분기 동안 그것을한다고 말했고, 표현식을 4 번 대신 52 번 반복하면됩니다. perl이나 Visual Basic을 사용하거나 실제로 문장을 생성하는 것을 선호 할 수 있습니다. 여기 간다 :

-- the input table, don't use in real query ... 
WITH 
input(id,quarter,orders,cost) AS (
      SELECT 1,201601,200,1000 
UNION ALL SELECT 1,201602,300,1500 
UNION ALL SELECT 1,201603,330,1800 
UNION ALL SELECT 1,201604,500,2500 
) 
-- end of input - 
SELECT 
    id 
, SUM(CASE quarter WHEN 201601 THEN orders END) AS "orders_201601" 
, SUM(CASE quarter WHEN 201602 THEN orders END) AS "orders_201602" 
, SUM(CASE quarter WHEN 201603 THEN orders END) AS "orders_201603" 
, SUM(CASE quarter WHEN 201604 THEN orders END) AS "orders_201604" 
, SUM(CASE quarter WHEN 201601 THEN cost END) AS "cost_201601" 
, SUM(CASE quarter WHEN 201602 THEN cost END) AS "cost_201602" 
, SUM(CASE quarter WHEN 201603 THEN cost END) AS "cost_201603" 
, SUM(CASE quarter WHEN 201604 THEN cost END) AS "cost_201604" 
FROM input 
GROUP BY id; 

id|orders_201601|orders_201602|orders_201603|orders_201604|cost_201601|cost_201602|cost_201603|cost_201604 
1|   200|   300|   330|   500|  1,000|  1,500|  1,800|  2,500 
([SQL Server의 '피벗'을 사용하여 컬럼에 행 변환]의