본문 바로가기
MS-SQL

동적 pivot

by 캡틴노랑이 2016. 10. 5.
반응형
동적 pivot 샘플 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
DECLARE @col NVARCHAR(MAX)
DECLARE @query NVARCHAR(MAX)
DECLARE @StndCodeBizDvs NVARCHAR(10)
DECLARE @StndItemCode NVARCHAR(30)
 
SET @StndCodeBizDvs = 'M'
SET @StndItemCode ='3439084'
SET @col = ''
 
SELECT @col = @col +'[' + AA.LoborCode + '],'
FROM (
  SELECT
   DISTINCT
   A.LoborCode
,  B.ItemSize
FROM dbo.DDETB_Z1_StndLaborQty A --표준공량
LEFT OUTER JOIN dbo.DDETB_Z1_StndItemList B ON B.StndCodeBizDvs = 'Z' AND ItemDvs = 'L' AND A.LoborCode = B.StndItemCode
WHERE A.StndCodeBizDvs = 'M'
AND A.BaseYYMM = '2016-06-01'
AND A.StndItemCode LIKE '3439084%'
) AA
SET @col = LEFT(@col, LEN(@col) -1)
SELECT @col
 
 
SET @query = '
  SELECT
    StndCodeBizDvs
  , StndItemCode
  , ItemName
  , ItemSize
  , ItemUnit
  , BaseYYMM
  , ' + @col + '
  FROM (
    SELECT
      A.StndCodeBizDvs
    , A.StndItemCode
    , B.ItemName
    , B.ItemSize
    , B.ItemUnit
    , A.BaseYYMM
    , A.LoborCode
    , A.LaborQty
    FROM dbo.DDETB_Z1_StndLaborQty A
    LEFT OUTER JOIN dbo.DDETB_Z1_StndItemList B ON A.StndCodeBizDvs = B.StndCodeBizDvs AND A.StndItemCode = B.StndItemCode 
    WHERE A.StndCodeBizDvs = '''+@StndCodeBizDvs+'''
    AND A.StndItemCode LIKE '''+@StndItemCode+'%''
  ) A
  PIVOT
  (
    MAX(LaborQty)
    FOR LoborCode IN ('+@col+')
  ) P
 
 
'
exec sp_executesql @query;

샘플 데이터





반응형

'MS-SQL' 카테고리의 다른 글

0으로 나누기 오류가 발생했습니다.  (0) 2016.12.20
MS-SQL 2016 Json 데이터를 DB로 전송하여 데이터 셋으로 일괄 작업하기  (0) 2016.11.23
XML 문서 쿼리로 조회하기  (0) 2015.08.12
Index  (0) 2015.07.29
CTE Table  (0) 2015.07.29

댓글