피벗

2014-03-04 5 views
0

을 작성하는 방법을 내가피벗

DEPT_NAME  EMP_NAME DESIGNATION 01-03-13    02-03-13 03-03-13 


C & I DHAS YOGESH BABASAHEB Diploma - Sr. Technician 0 0 0 0  0 0 0 0  0 0 0 0 

제발 도와주세요에

DEPT_NAME EMP_NAME DESIGNATION DAY FIRST_SHIFT SECOND_SHIFT THIRD_SHIFT GENERAL_SHIFT 
C & I DHAS YOGESH BABASAHEB Diploma - Sr. Technician 01-3-13 0 0 0 0 
C & I DHAS YOGESH BABASAHEB Diploma - Sr. Technician 02-3-13 0 0 0 0 
C & I DHAS YOGESH BABASAHEB Diploma - Sr. Technician 03-3-13 0 0 0 0 

내가 원하는 같은 날짜 열이있는 테이블이 ...!

+1

어떤 열 당신이 피벗 하시겠습니까? 명명 날짜는 머리글 오른쪽에 원하는 것입니다. 하지만 그 가치는 FIRST_SHIFT입니까? 너 뭐 해봤 니? [msdn] (http://technet.microsoft.com/en-us/library/ms177410 (v = sql.105) .aspx) 및 SO – Arion

+0

에 많은 예제가 있습니다. 안녕하십니까. 답장을 보내 주셔서 감사합니다. 나는 하루 칼럼을 가지고있다. 하루에 나는 4 교대가있다. 그래서 헤더에있는 날 열을 옮기고 싶습니다. 그리고 4 교대는 쉼표 구분 기호로 연속적으로 나타납니다. – user3377919

답변

0

어쩌면이 도움이 될 것입니다

우선 몇 가지 테스트 데이터 :

CREATE TABLE tbl 
(
    DEPT_NAME VARCHAR(200), 
    EMP_NAME VARCHAR(200), 
    DESIGNATION VARCHAR(200), 
    [DAY] DATE, 
    FIRST_SHIFT INT, 
    SECOND_SHIFT INT, 
    THIRD_SHIFT INT, 
    GENERAL_SHIFT INT 
) 
INSERT INTO tbl 
VALUES 
('C & I','DHAS YOGESH BABASAHEB','Diploma - Sr. Technician','01-3-13',0,0,0,0), 
('C & I','DHAS YOGESH BABASAHEB','Diploma - Sr. Technician','02-3-13',0,0,0,0), 
('C & I','DHAS YOGESH BABASAHEB','Diploma - Sr. Technician','03-3-13',0,0,0,0) 

concating 고유 열 :

DECLARE @cols VARCHAR(MAX) 
;WITH CTE 
AS 
(
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY tbl.[DAY] ORDER BY tbl.[DAY]) AS rowNbr, 
     tbl.[DAY] 
    FROM 
     tbl 
) 
SELECT @cols=STUFF 
(
    (
     SELECT 
      ',' +QUOTENAME([DAY]) 
     FROM 
      CTE 
     WHERE 
      CTE.rowNbr=1 
     FOR XML PATH('') 
    ) 
,1,1,'') 

그런 다음 동적 SQL 실행 :

DECLARE @query NVARCHAR(4000)= 
N'SELECT 
    * 
FROM 
(
    SELECT 
     tbl.DEPT_NAME, 
     tbl.EMP_NAME, 
     tbl.DESIGNATION, 
     tbl.[DAY], 
     (
      CAST(tbl.FIRST_SHIFT AS VARCHAR(10))+'' ''+ 
      CAST(tbl.SECOND_SHIFT AS VARCHAR(10))+'' ''+ 
      CAST(tbl.THIRD_SHIFT AS VARCHAR(10))+'' ''+ 
      CAST(tbl.GENERAL_SHIFT AS VARCHAR(10)) 
     ) AS SHIFT 
    FROM 
     tbl 
) AS p 
PIVOT 
(
    MAX(SHIFT) FOR [DAY] IN('[email protected]+') 
) AS pvt' 

EXECUTE(@query) 

그리고 내 c ASE는 생성 된 테이블을 삭제 :

DROP TABLE tbl 

출력은 다음과 같습니다

DEPT_NAME EMP_NAME    DESIGNATION    2013-01-03 2013-02-03 2013-03-03 
C & I  DHAS YOGESH BABASAHEB Diploma - Sr. Technician 0 0 0 0  0 0 0 0  0 0 0 0 
+0

고마워요. 이것은 나를 위해 매우 도움이됩니다. – user3377919