MSSQL 2005
Declare @Columns Varchar(max), @SQL Varchar(max), @SQL1 Varchar(max)
Set @Columns = ''
Select @Columns = @Columns + '[' + Convert(varchar(10),Seq) + '],'
From (
Select Seq From SPSSCOrderNo
) AS ods
Set @Columns = LEFT(@Columns, LEN(@Columns) - 1)
------------
Set @SQL = ''
Set @SQL1 = ''
SET @SQL = '
SELECT CASE Detail WHEN ''OrderNo'' THEN 0 ELSE 1 END seq
, a.*
FROM (SELECT Seq
, CAST(OrderNo AS VARCHAR(6)) OrderNo
, CAST(CustNm AS VARCHAR(6)) CustNm
, '''' Team
, '''' Divi
FROM SPSSCTitle
) a
UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a
PIVOT (MIN(v) FOR Seq IN (' + @Columns + ')) a
UNION
SELECT *
FROM (SELECT c.Seq
, c.Team
, c.Divi
, c.Detail
, c.Result
, b.Seq AS Seq_b
FROM SPSSCTitle b
INNER JOIN SPSSCDetailOrder c
ON b.OrderNo = c.OrderNo
) a
PIVOT (MIN(Result) FOR Seq_b IN (' + @Columns + ')) a
'
EXEC(@SQL)
이렇게 수정했는데.. 다른 수주 건으로 내용을 등록하면 아래 표와 같이 가장 하단에 출력됩니다.
빨간색 바탕에 출력되어야 하는데. 테이블 구조는 임시 테이블 구조와 동일합니다.
15번 줄 추가했을대..
seq | Team | Divi | Detail | 1 | 2 | 3 | 4 | 5 | 6 |
0 | OrderNo | 18A765 | 20B001 | 20B002 | 20B003 | 20B004 | 20A141 | ||
1 | CustNm | UXN | 비에이 | 비에이 | 비에이 | 비에이 | 비에이 | ||
1 | 광학팀 | Delivery | Laser | NULL | 1 | NULL | NULL | 1 | NULL |
2 | 광학팀 | Delivery | Chiller | NULL | 2 | NULL | NULL | NULL | NULL |
3 | 광학팀 | Delivery | BET | NULL | 3 | NULL | NULL | NULL | NULL |
4 | 광학팀 | Delivery | BET Mount | NULL | 4 | NULL | NULL | NULL | NULL |
5 | 광학팀 | Delivery | ATT | NULL | 5 | NULL | NULL | NULL | NULL |
6 | 광학팀 | Delivery | Wave Plate | NULL | 6 | NULL | NULL | NULL | NULL |
7 | 광학팀 | Delivery | POL | NULL | 7 | NULL | NULL | NULL | NULL |
8 | 광학팀 | Delivery | Mirror 종류 | NULL | 8 | NULL | NULL | NULL | NULL |
9 | 광학팀 | Delivery | Mirror Spring | NULL | 9 | NULL | NULL | NULL | NULL |
10 | 광학팀 | Head | Shutter 위치 | NULL | 10 | NULL | NULL | NULL | NULL |
11 | 광학팀 | Head | Power Meter | NULL | 11 | NULL | NULL | NULL | NULL |
12 | 광학팀 | Head | LPC | NULL | 12 | NULL | NULL | NULL | NULL |
13 | 광학팀 | Head | TC Lens | NULL | 13 | NULL | NULL | NULL | NULL |
14 | 광학팀 | Head | Lens Mounting 방법 | NULL | 14 | NULL | NULL | NULL | NULL |
15 | 광학팀 | Delivery | Laser | NULL | NULL | NULL | NULL | 1 | NULL |
컬럼이 동적일때는 임시테이블에 담을 수 없나요??
15줄에
15 광학팀 Delivery Laser 20B004 1 이러게 추가했어요
그럼 이렇게 화면에 나오는데
seq | Team | Divi | Detail | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | OrderNo | 18A765 | 20B001 | 20B002 | 20B003 | 20B004 | 20A141 | 20A142 | ||
1 | CustNm | UXN | 비에이 | 비에이 | 비에이 | 비에이 | 비에이 | 비에이 | ||
1 | 광학팀 | Delivery | Laser | NULL | 1 | NULL | NULL | NULL | NULL | NULL |
2 | 광학팀 | Delivery | Chiller | NULL | 2 | NULL | NULL | NULL | NULL | NULL |
3 | 광학팀 | Delivery | BET | NULL | 3 | NULL | NULL | NULL | NULL | NULL |
4 | 광학팀 | Delivery | BET Mount | NULL | 4 | NULL | NULL | NULL | NULL | NULL |
5 | 광학팀 | Delivery | ATT | NULL | 5 | NULL | NULL | NULL | NULL | NULL |
6 | 광학팀 | Delivery | Wave Plate | NULL | 6 | NULL | NULL | NULL | NULL | NULL |
7 | 광학팀 | Delivery | POL | NULL | 7 | NULL | NULL | NULL | NULL | NULL |
8 | 광학팀 | Delivery | Mirror 종류 | NULL | 8 | NULL | NULL | NULL | NULL | NULL |
9 | 광학팀 | Delivery | Mirror Spring | NULL | 9 | NULL | NULL | NULL | NULL | NULL |
10 | 광학팀 | Head | Shutter 위치 | NULL | 10 | NULL | NULL | NULL | NULL | NULL |
11 | 광학팀 | Head | Power Meter | NULL | 11 | NULL | NULL | NULL | NULL | NULL |
12 | 광학팀 | Head | LPC | NULL | 12 | NULL | NULL | NULL | NULL | NULL |
13 | 광학팀 | Head | TC Lens | NULL | 13 | NULL | NULL | NULL | NULL | NULL |
14 | 광학팀 | Head | Lens Mounting 방법 | NULL | 14 | NULL | NULL | NULL | NULL | NULL |
15 | 광학팀 | Delivery | Laser | NULL | NULL | NULL | NULL | 1 | NULL | NULL |
원하는 것은
seq | Team | Divi | Detail | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | OrderNo | 18A765 | 20B001 | 20B002 | 20B003 | 20B004 | 20A141 | 20A142 | ||
1 | CustNm | UXN | 비에이 | 비에이 | 비에이 | 비에이 | 비에이 | 비에이 | ||
1 | 광학팀 | Delivery | Laser | NULL | 1 | NULL | NULL | 1 | NULL | NULL |
2 | 광학팀 | Delivery | Chiller | NULL | 2 | NULL | NULL | NULL | NULL | NULL |
3 | 광학팀 | Delivery | BET | NULL | 3 | NULL | NULL | NULL | NULL | NULL |
4 | 광학팀 | Delivery | BET Mount | NULL | 4 | NULL | NULL | NULL | NULL | NULL |
5 | 광학팀 | Delivery | ATT | NULL | 5 | NULL | NULL | NULL | NULL | NULL |
6 | 광학팀 | Delivery | Wave Plate | NULL | 6 | NULL | NULL | NULL | NULL | NULL |
7 | 광학팀 | Delivery | POL | NULL | 7 | NULL | NULL | NULL | NULL | NULL |
8 | 광학팀 | Delivery | Mirror 종류 | NULL | 8 | NULL | NULL | NULL | NULL | NULL |
9 | 광학팀 | Delivery | Mirror Spring | NULL | 9 | NULL | NULL | NULL | NULL | NULL |
10 | 광학팀 | Head | Shutter 위치 | NULL | 10 | NULL | NULL | NULL | NULL | NULL |
11 | 광학팀 | Head | Power Meter | NULL | 11 | NULL | NULL | NULL | NULL | NULL |
12 | 광학팀 | Head | LPC | NULL | 12 | NULL | NULL | NULL | NULL | NULL |
13 | 광학팀 | Head | TC Lens | NULL | 13 | NULL | NULL | NULL | NULL | NULL |
14 | 광학팀 | Head | Lens Mounting 방법 | NULL | 14 | NULL | NULL | NULL | NULL | NULL |
즉 team, divi, detail 같은 라인에 해당 번호줄에 찍히는거요?
테이블 입력받는 구조 (테이블 명 : SPSSCTitle)
Seq | yyyy | OrderNo | CustNm |
1 | 2018 | 18A765 | UXN |
2 | 2019 | 20B001 | 비에이치 |
3 | 2019 | 20B002 | 비에이치 |
4 | 2019 | 20B003 | 비에이치 |
5 | 2019 | 20B004 | 비에이치 |
6 | 2019 | 20A141 | 비에이치 |
7 | 2019 | 20A142 | 비에이치 |
테이블 입력받는 구조 (테이블 명 : SPSSCDetailOrder)
Seq | Team | Divi | Detail | OrderNo | Result |
1 | 광학팀 | Delivery | Laser | 20B001 | 1 |
2 | 광학팀 | Delivery | Chiller | 20B001 | 2 |
3 | 광학팀 | Delivery | BET | 20B001 | 3 |
4 | 광학팀 | Delivery | BET Mount | 20B001 | 4 |
5 | 광학팀 | Delivery | ATT | 20B001 | 5 |
6 | 광학팀 | Delivery | Wave Plate | 20B001 | 6 |
7 | 광학팀 | Delivery | POL | 20B001 | 7 |
8 | 광학팀 | Delivery | Mirror 종류 | 20B001 | 8 |
9 | 광학팀 | Delivery | Mirror Spring | 20B001 | 9 |
10 | 광학팀 | Head | Shutter 위치 | 20B001 | 10 |
11 | 광학팀 | Head | Power Meter | 20B001 | 11 |
12 | 광학팀 | Head | LPC | 20B001 | 12 |
13 | 광학팀 | Head | TC Lens | 20B001 | 13 |
14 | 광학팀 | Head | Lens Mounting 방법 | 20B001 | 14 |
15 | 광학팀 | Delivery | Laser | 20B004 | 1 |
두 테이블은 데이터가 계속 추가 될 수 있어요..
테이블 설계가 잘못 되었나요?
죄송하지만 다시한번 답변 부탁드립니다.
도움받아 이거 하나만 처리하면 되는데 도저희 모르겠네요.
-- MSSQL --
WITH tab_b AS
(
SELECT 1 Seq, '2018' yyyy, '18A765' OrderNo, 'A' CustNm
UNION ALL SELECT 2, '2019', '20B001', 'A'
UNION ALL SELECT 3, '2019', '20B002', 'A'
UNION ALL SELECT 4, '2019', '20B003', 'B'
UNION ALL SELECT 5, '2019', '20B004', 'B'
UNION ALL SELECT 6, '2019', '20A141', 'B'
UNION ALL SELECT 7, '2019', '20A142', 'B'
UNION ALL SELECT 8, '2019', '20B010', 'B'
UNION ALL SELECT 9, '2019', '20B011', 'D'
UNION ALL SELECT 10, '2021', '21A001', 'D'
UNION ALL SELECT 11, '2021', '21A002', 'D'
UNION ALL SELECT 12, '2021', '21A003', 'D'
)
, tab_c AS
(
SELECT 2 Seq, '광학팀' Team, 'Delivery' Divi, 'Laser' Detail, '20B001' OrderNo, null Result
UNION ALL SELECT 9, '광학팀', 'Delivery', 'Chiller' , '20B001', null
UNION ALL SELECT 10, '광학팀', 'Delivery', 'BET' , '20B001', 'O'
UNION ALL SELECT 11, '광학팀', 'Delivery', 'BET Mount' , '20B001', 'O'
UNION ALL SELECT 12, '광학팀', 'Delivery', 'ATT' , '20B001', 'X'
UNION ALL SELECT 13, '광학팀', 'Delivery', 'Wave Plate' , '20B001', null
UNION ALL SELECT 14, '광학팀', 'Delivery', 'POL' , '20B001', null
UNION ALL SELECT 15, '광학팀', 'Delivery', 'Mirror 종류' , '20B001', null
UNION ALL SELECT 16, '광학팀', 'Delivery', 'Mirror Spring', '20B001', null
UNION ALL SELECT 17, '광학팀', 'Head' , 'Shutter 위치' , '20B001', null
UNION ALL SELECT 18, '광학팀', 'Head' , 'Power Meter' , '20B001', null
UNION ALL SELECT 19, '광학팀', 'Delivery', 'BET' , '20B004', 'O'
)
SELECT CASE Detail WHEN 'OrderNo' THEN 0 ELSE 1 END seq
, a.*
FROM (SELECT Seq
, CAST(OrderNo AS VARCHAR(6)) OrderNo
, CAST(CustNm AS VARCHAR(6)) CustNm
, '' Team
, '' Divi
FROM tab_b
) a
UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a
PIVOT (MIN(v) FOR Seq IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a
UNION
SELECT *
FROM (SELECT c.Seq
, c.Team
, c.Divi
, c.Detail
, c.Result
, b.Seq Seq_b
FROM tab_b b
INNER JOIN tab_c c
ON b.OrderNo = c.OrderNo
) a
PIVOT (MIN(Result) FOR Seq_b IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a
;
seq | Team | Divi | Detail | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
0 | OrderNo | 18A765 | 20B001 | 20B002 | 20B003 | 20B004 | 20A141 | 20A142 | 20B010 | 20B011 | 21A001 | 21A002 | 21A003 | ||
1 | CustNm | A | A | A | B | B | B | B | B | D | D | D | D | ||
2 | 광학팀 | Delivery | Laser | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
9 | 광학팀 | Delivery | Chiller | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
10 | 광학팀 | Delivery | BET | NULL | O | NULL | NULL | O | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
11 | 광학팀 | Delivery | BET Mount | NULL | O | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
12 | 광학팀 | Delivery | ATT | NULL | X | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
13 | 광학팀 | Delivery | Wave Plate | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
14 | 광학팀 | Delivery | POL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
15 | 광학팀 | Delivery | Mirror 종류 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
16 | 광학팀 | Delivery | Mirror Spring | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
17 | 광학팀 | Head | Shutter 위치 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
18 | 광학팀 | Head | Power Meter | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
19 | 광학팀 | Delivery | BET | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
A 테이블
Seq | Team | Divi | Detail |
2 | 광학팀 | Delivery | Laser |
9 | 광학팀 | Delivery | Chiller |
10 | 광학팀 | Delivery | BET |
11 | 광학팀 | Delivery | BET Mount |
12 | 광학팀 | Delivery | ATT |
13 | 광학팀 | Delivery | Wave Plate |
14 | 광학팀 | Delivery | POL |
15 | 광학팀 | Delivery | Mirror 종류 |
16 | 광학팀 | Delivery | Mirror Spring |
17 | 광학팀 | Head | Shutter 위치 |
18 | 광학팀 | Head | Power Meter |
21 | 광학팀 | Head | LPC |
22 | 광학팀 | Head | TC Lens |
23 | 광학팀 | Head | Lens Mounting 방법 |
B 테이블
Seq | yyyy | OrderNo | CustNm |
1 | 2018 | 18A765 | UXN |
2 | 2019 | 20B001 | 비에이치 |
3 | 2019 | 20B002 | 비에이치 |
4 | 2019 | 20B003 | 비에이치 |
5 | 2019 | 20B004 | 비에이치 |
6 | 2019 | 20A141 | 비에이치 |
7 | 2019 | 20A142 | 비에이치 |
8 | 2019 | 20B010 | 비에이치 |
9 | 2019 | 20B011 | 비에이치 |
C 테이블 (idx 컬럼 추가 - A테이블 Seq 값)
Seq | idx | Team | Divi | Detail | OrderNo | Result |
1 | 2 | 광학팀 | Delivery | Laser | 20B001 | 1 |
2 | 2 | 광학팀 | Delivery | Chiller | 20B001 | 2 |
3 | 2 | 광학팀 | Delivery | BET | 20B001 | 3 |
4 | 2 | 광학팀 | Delivery | BET Mount | 20B001 | 4 |
5 | 2 | 광학팀 | Delivery | ATT | 20B001 | 5 |
6 | 2 | 광학팀 | Delivery | Wave Plate | 20B001 | 6 |
7 | 2 | 광학팀 | Delivery | POL | 20B001 | 7 |
8 | 2 | 광학팀 | Delivery | Mirror 종류 | 20B001 | 8 |
9 | 2 | 광학팀 | Delivery | Mirror Spring | 20B001 | 9 |
10 | 2 | 광학팀 | Head | Shutter 위치 | 20B001 | 10 |
11 | 2 | 광학팀 | Head | Power Meter | 20B001 | 11 |
12 | 2 | 광학팀 | Head | LPC | 20B001 | 12 |
13 | 2 | 광학팀 | Head | TC Lens | 20B001 | 13 |
14 | 2 | 광학팀 | Head | Lens Mounting 방법 | 20B001 | 14 |
15 | 2 | 광학팀 | Delivery | Laser | 20B004 | 1 |
여기서 어떤식으로 변경해야 하나요??
Declare @Columns Varchar(max), @SQL Varchar(max), @SQL1 Varchar(max)
Set @Columns = ''
Select @Columns = @Columns + '[' + Convert(varchar(10),Seq) + '],'
From (
Select Seq From SPSSCOrderNo
) AS ods
Set @Columns = LEFT(@Columns, LEN(@Columns) - 1)
------------
Set @SQL = ''
Set @SQL1 = ''
SET @SQL = '
SELECT CASE Detail WHEN ''OrderNo'' THEN 0 ELSE 1 END seq
, a.*
FROM (SELECT Seq
, CAST(OrderNo AS VARCHAR(6)) OrderNo
, CAST(CustNm AS VARCHAR(6)) CustNm
, '''' Team
, '''' Divi
FROM SPSSCTitle
) a
UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a
PIVOT (MIN(v) FOR Seq IN (' + @Columns + ')) a
UNION
SELECT *
FROM (SELECT c.Seq
, c.Team
, c.Divi
, c.Detail
, c.Result
, b.Seq AS Seq_b
FROM SPSSCTitle b
INNER JOIN SPSSCDetailOrder c
ON b.OrderNo = c.OrderNo
) a
PIVOT (MIN(Result) FOR Seq_b IN (' + @Columns + ')) a
'
EXEC(@SQL)
WITH tab_a AS ( SELECT 2 Seq, '광학팀' Team, 'Delivery' Divi, 'Laser' Detail UNION ALL SELECT 9, '광학팀', 'Delivery', 'Chiller' UNION ALL SELECT 10, '광학팀', 'Delivery', 'BET' UNION ALL SELECT 11, '광학팀', 'Delivery', 'BET Mount' UNION ALL SELECT 12, '광학팀', 'Delivery', 'ATT' UNION ALL SELECT 13, '광학팀', 'Delivery', 'Wave Plate' UNION ALL SELECT 14, '광학팀', 'Delivery', 'POL' UNION ALL SELECT 15, '광학팀', 'Delivery', 'Mirror 종류' UNION ALL SELECT 16, '광학팀', 'Delivery', 'Mirror Spring' UNION ALL SELECT 17, '광학팀', 'Head' , 'Shutter 위치' UNION ALL SELECT 18, '광학팀', 'Head' , 'Power Meter' UNION ALL SELECT 21, '광학팀', 'Head' , 'LPC' UNION ALL SELECT 22, '광학팀', 'Head' , 'TC Lens' UNION ALL SELECT 23, '광학팀', 'Head' , 'Lens Mounting 방법' ) , tab_b AS ( SELECT 1 Seq, '2018' yyyy, '18A765' OrderNo, 'UXN' CustNm UNION ALL SELECT 2, '2019', '20B001', '비에이치' UNION ALL SELECT 3, '2019', '20B002', '비에이치' UNION ALL SELECT 4, '2019', '20B003', '비에이치' UNION ALL SELECT 5, '2019', '20B004', '비에이치' UNION ALL SELECT 6, '2019', '20A141', '비에이치' UNION ALL SELECT 7, '2019', '20A142', '비에이치' UNION ALL SELECT 8, '2019', '20B010', '비에이치' UNION ALL SELECT 9, '2019', '20B011', '비에이치' ) , tab_c AS ( SELECT 1 Seq, 2 idx, '20B001' OrderNo, '1' Result UNION ALL SELECT 2, 9, '20B001', '2' UNION ALL SELECT 3, 10, '20B001', '3' UNION ALL SELECT 4, 11, '20B001', '4' UNION ALL SELECT 5, 12, '20B001', '5' UNION ALL SELECT 6, 13, '20B001', '6' UNION ALL SELECT 7, 14, '20B001', '7' UNION ALL SELECT 8, 15, '20B001', '8' UNION ALL SELECT 9, 16, '20B001', '9' UNION ALL SELECT 10, 17, '20B001', '10' UNION ALL SELECT 11, 18, '20B001', '11' UNION ALL SELECT 12, 21, '20B001', '12' UNION ALL SELECT 13, 22, '20B001', '13' UNION ALL SELECT 14, 23, '20B001', '14' UNION ALL SELECT 15, 2, '20B004', '1' ) SELECT CASE Detail WHEN 'OrderNo' THEN 0 ELSE 1 END Seq , a.* FROM (SELECT Seq , CAST(OrderNo AS VARCHAR(30)) OrderNo , CAST(CustNm AS VARCHAR(30)) CustNm , '' Team , '' Divi FROM tab_b ) a UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a PIVOT (MIN(v) FOR Seq IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])) a UNION SELECT * FROM (SELECT c.Idx , a.Team , a.Divi , a.Detail , c.Result , b.Seq FROM tab_c c INNER JOIN tab_b b ON c.OrderNo = b.OrderNo INNER JOIN tab_a a ON c.Idx = a.Seq ) a PIVOT (MIN(Result) FOR Seq IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])) a ;