2014-01-06 4 views
2

새로운 데이터에 대한 열을 추가하고 더 전통적인 테이블 구조로 변환하는 원시 데이터 집합을 가져 오려고합니다. 아이디어는 스크립트가 열 이름 (날짜)을 가져 와서 그것을 새로운 열에 넣은 다음 각 날짜 데이터 값을 서로 겹쳐서 쌓는 것입니다.SQL 서버의 행을 열로 변환하는 방법

Store  1/1/2013  2/1/2013 
XYZ INC $1000  $2000 

으로

Store  Date   Value 
XYZ INC 1/1/2013  $1000 
XYZ INC 2/1/2013  $2000 

감사

+0

엄밀히 말하면 단순 해 보입니다. 데이터가 저장되는 방식 (테이블 정의)을 이미 보여 주거나 이미 보유하고있는 것을 보여줄 수 있다면 우리는 그곳에 도착하는 방법을 보여줄 수 있습니다. – RBarryYoung

+0

기술적 인 용어 "Melt"의 사용에 적합 – Hogan

+1

정확한 기술 용어는 "Pivot"입니다. 그걸 찾으세요. 그 질문은 하루에 한 번 정도 물어 봅니다. –

답변

-1

나는 당신이 각 날짜 컬럼에 대한 INSERT 문을 생성하는 스크립트 언어 (펄, 파이썬 등)을 사용합니다 원래의 데이터로 변환하고 행을 StoreDate으로 바꿔 넣습니다. 그런 다음 정규화 된 테이블에 삽입을 실행하십시오.

+0

SQL에서 피벗을 수행 할 수있는 스크립팅 언어? – Hogan

0

문제의 세부 사항 (예 : 소스 형식, 날짜의 다양성 및 가변성, 작업 수행 빈도 등)에 따라 다른 언어를 사용하여 데이터를 분석하는 것이 훨씬 쉽습니다. 다시 포맷팅 기능을 수행하거나 최종 테이블에 직접 삽입 할 수 있습니다.

완전한 SQL 솔루션에 관심이 있다면 동적 피벗 기능을 찾고있는 것처럼 들릴 것입니다. 키워드는 dynamic SQLunpivot입니다. 세부 정보는 사용중인 RDBMS와 초기 데이터 세트의 사양에 따라 다릅니다.

+0

피벗 또는 피벗 해제가 동적이어야 할 필요가 거의없고 질문에서 동적 솔루션이 필요하다고 제안하는 것은 거의 없습니다. – Hogan

+0

@Hogan, 당신 말이 맞아요,이 질문에 제공된 아주 작은 세부 사항이 있습니다. 그러나 나는 피벗/피벗 해제가 거의 동적이지 않다는 평가에 완전히 동의하지 않습니다. 여기서 필요하지는 않지만, 비주거 식 컬럼이 다소 자주 변경된다는 명백한 징후가 있습니다. 따라서, 작성한 코드를 지속적으로 다시보고 싶지 않다면, 약간의 동적 SQL이이 문제를 깔끔하게 해결할 수 있습니다. – chezy525

5

원하는 결과를 얻을 수있는 몇 가지 방법이 있습니다.

select store, '1/1/2013' date, [1/1/2013] value 
from yourtable 
union all 
select store, '2/1/2013' date, [2/1/2013] value 
from yourtable; 

SQL Fiddle with Demo를 참조하십시오 SELECTUNION ALL

당신은 사용할 수 있습니다.

select store, date, value 
from yourtable 
unpivot 
(
    value 
    for date in ([1/1/2013], [2/1/2013]) 
) un; 

SQL Fiddle with Demo를 참조하십시오

당신은 UNPIVOT 기능을 사용할 수 있습니다.

마지막으로, SQL Server의 버전에 따라 당신은 CROSS APPLY를 사용할 수 있습니다

select store, date, value 
from yourtable 
cross apply 
(
    values 
    ('1/1/2013', [1/1/2013]), 
    ('2/1/2013', [2/1/2013]) 
) c (date, value) 

SQL Fiddle with Demo를 참조하십시오. 모든 버전의 결과는 다음과 같습니다.

| STORE |  DATE | VALUE | 
|---------|----------|-------| 
| XYZ INC | 1/1/2013 | 1000 | 
| XYZ INC | 2/1/2013 | 2000 | 
관련 문제