안녕하세요~
아래 와 같이 열을 행으로 완전히 바꾸고 싶은데 어떻해야할지 생각이 안나네요
배송테이블 | ||||||
순번 | 납품처명 | 물류코스 | 품목명 | BOX NO | 중량 | 비고 |
1 | 가은 | 고덕초등학교 | 안심 | 1/2 | 10kg | 잘부탁합니다. |
2 | 가은 | 고덕초등학교 | 안심 | 2/2 | 10kg | |
3 | 은성 | 김해경원고등학교 | 가슴살 | 1/1 | 10kg | 잘부탁합니다. |
행은 항상 순번이 매겨져 있습니다. 뭔가 UNPIVOT을 하기 위해서는 넣아야 할것 같아서 넣었습니다.
원하는 결과1 | |
열1 | 열2 |
납품처명 | 가은 |
물류코스 | 고덕초등학교 |
품목명 | 안심 |
BOX NO | 1/2 |
중량 | 10kg |
비고 | 잘부탁합니다. |
납품처명 | 가은 |
물류코스 | 고덕초등학교 |
품목명 | 안심 |
BOX NO | 2/2 |
중량 | 10kg |
비고 | |
납품처명 | 은성 |
물류코스 | 김해경원고등학교 |
품목명 | 가슴살 |
BOX NO | 1/1 |
중량 | 10kg |
비고 | 잘부탁합니다. |
아니면 아래 결과가 더 쉬우면 아래 결과를 찾는 방법 부탁드립니다.
원하는 결과2 | ||
순번 | 열1 | 열2 |
1 | 납품처명 | 가은 |
1 | 물류코스 | 고덕초등학교 |
1 | 품목명 | 안심 |
1 | BOX NO | 1/2 |
1 | 중량 | 10kg |
1 | 비고 | 잘부탁합니다. |
2 | 납품처명 | 가은 |
2 | 물류코스 | 고덕초등학교 |
2 | 품목명 | 안심 |
2 | BOX NO | 2/2 |
2 | 중량 | 10kg |
2 | 비고 | |
3 | 납품처명 | 은성 |
3 | 물류코스 | 김해경원고등학교 |
3 | 품목명 | 가슴살 |
3 | BOX NO | 1/1 |
3 | 중량 | 10kg |
3 | 비고 | 잘부탁합니다. |
감사합니다!
unpivot과 case 참고요..
with tmp as (
select 1 as c0, cast('가은' as varchar(50)) as c1, cast('고덕초등학교' as varchar(50)) as c2, cast('안심' as varchar(50)) as c3, cast('1/2' as varchar(50)) as c4, cast('10kg' as varchar(50)) as c5, cast('잘부탁합니다.' as varchar(50)) as c6 union all
select 2, '가은', '고덕초등학교', '안심', '2/2', '10kg', '' union all
select 3, '은성', '김해경원고등학교', '가슴살', '1/1', '10kg', '잘부탁합니다.'
)
select
c0,
val,
n1
from tmp
unpivot(n1 for val in (c1, c2, c3,c4, c5, c6)) as nx ;
with tmp as (
select 1 as c0, '가은' as c1, '고덕초등학교' as c2, '안심' as c3, '1/2' as c4, '10kg' as c5, '잘부탁합니다.' as c6 union all
select 2, '가은', '고덕초등학교', '안심', '2/2', '10kg', '' union all
select 3, '은성', '김해경원고등학교', '가슴살', '1/1', '10kg', '잘부탁합니다.'
), nums AS (
SELECT 1 as n
UNION ALL
SELECT n + 1 FROM nums
WHERE n < 6
)
select
c0,
case n when 1 then 'c1'
when 2 then 'c2'
when 3 then 'c3'
when 4 then 'c4'
when 5 then 'c5'
when 6 then 'c6'
end as new_c,
case n when 1 then c1
when 2 then c2
when 3 then c3
when 4 then c4
when 5 then c5
when 6 then c6
end as new_v
from
tmp a
cross join nums
order by c0 ;