안녕하세요^^
아래 각 테이블을 가로로 합칠수 있을까요?
각 테이블마가 현장코드를 가지고 있는데
테이블마다 Row#를 붙이고 가장 현장코드가 1 인 것중 Row가 가장 만은것 기준으로 Left outer join을 서로 시켜야할까요?
초보라서 잘 모르는데 고수님들 고견 부탁드립니다.
인건비테이블 | 투입재료테이블 | 투입재료테이블 | 결비내역테이블 | |||||||||||||||||||||||
현장코드 | 작업자 | 인건비 | 현장코드 | 구분 | 재료명 | 수량 | 단위 | 단가 | 금액 | 현장코드 | 품목 | 업체명 | 수량 | 금액 | 합계 | 현장코드 | 지출처 | 구분 | 사용자 | 계정과목 | 금액 | 세부내역 | 비고 | |||
1 | 작업자1 | 250000 | 1 | 상도 | 재료1 | 1 | EA | 5000 | 5000 | 1 | 스카이 | 경남스카이 | 1 | 5000 | 1 | 편의점 | 법인카드 | 홍길동 | 5000 | |||||||
1 | 작업자2 | 150000 | 1 | 중도(내화) | 재료2 | 1 | BOX | 55000 | 55000 | 1 | 스카이 | 경남스카이 | 1 | 5000 | ||||||||||||
1 | 하도 | 재료3 | 1 | 말 | 5520 | 5520 | 1 | 스카이 | 경남스카이 | 1 | 5000 | |||||||||||||||
1 | 스카이 | 경남스카이 | 1 | 5000 | ||||||||||||||||||||||
1 | 스카이 | 경남스카이 | 1 | 5000 | ||||||||||||||||||||||
옆으로 합치기 | ||||||||||||||||||||||||||
작업자 | 인건비 | 구분 | 재료명 | 수량 | 단위 | 단가 | 금액 | 품목 | 업체명 | 수량 | 금액 | 합계 | 지출처 | 구분 | 사용자 | 계정과목 | 금액 | 세부내역 | 비고 | |||||||
작업자1 | 250000 | 상도 | 재료1 | 1 | EA | 5000 | 5000 | 스카이 | 경남스카이 | 1 | 5000 | 편의점 | 법인카드 | 홍길동 | 5000 | |||||||||||
작업자2 | 150000 | 중도(내화) | 재료2 | 1 | BOX | 55000 | 55000 | 스카이 | 경남스카이 | 1 | 5000 | |||||||||||||||
하도 | 재료3 | 1 | 말 | 5520 | 5520 | 스카이 | 경남스카이 | 1 | 5000 | |||||||||||||||||
스카이 | 경남스카이 | 1 | 5000 | |||||||||||||||||||||||
스카이 | 경남스카이 | 1 | 5000 | |||||||||||||||||||||||
Comment 3
-
지영아빠
2024.02.02 09:58
-
정말 놀랍습니다. 감사합니다ㅠㅠ cte 실무에서 정말 많이 사용되는군요. 감사합니다!
-
정말 놀랍습니다. 감사합니다ㅠㅠ cte 실무에서 정말 많이 사용되는군요. 감사합니다!
핵심은 두가지가 될것 같으네요.
1. recursive하게 number를 만드는 것
2. 각 테이블에 더미로 rownumber를 만드는 것
그 다음은 조인이 될것 같으네요.
참고요
with
nums as (select 1 as r union all select r + 1 from nums where r < 10),
t1 as (
Select '1' as 현장코드, '작업자1' as 작업자, '250000' as 인건비 union all
Select '1' as 현장코드, '작업자2' as 작업자, '150000' as 인건비 ),
t2 as (Select '1' as 현장코드, '상도' as 구분, '재료1' as 재료명 union all
Select '1' as 현장코드, '중도(내화)' as 구분, '재료2' as 재료명 union all
Select '1' as 현장코드, '하도' as 구분, '재료3' as 재료명 ),
t3 as ( Select '1' as 현장코드, '스카이' as 품목, '경남스카이' as 업체명 union all
Select '1' as 현장코드, '스카이' as 품목, '경북스카이' as 업체명 union all
Select '1' as 현장코드, '스카이' as 품목, '충청스카이' as 업체명 union all
Select '1' as 현장코드, '스카이' as 품목, '서울' as 업체명 ),
t4 as ( Select '1' as 현장코드, '편의점' as 지출처, '홍길동' as 사용자 )
select
*
from
nums a
left outer join (select
row_number() over (order by (select 1)) as r, *
from t1) a1
on a.r = a1.r
left outer join (select
row_number() over (order by (select 1)) as r, *
from t2) a2
on a.r = a2.r
left outer join (select
row_number() over (order by (select 1)) as r, *
from t3 ) a3
on a.r = a3.r
left outer join (select
row_number() over (order by (select 1)) as r, *
from t4 ) a4
on a.r = a4.r
where
isnull(a1.r, 0) + isnull(a2.r, 0) + isnull(a3.r, 0) + isnull(a4.r, 0) > 0