데이터 형태
순번 | 품목 |
1 | 연필 |
2 | 지우개 |
3 | 볼펜 |
4 | 색종이 |
5 | 책상 |
6 | 의자 |
이런식으로 데이터가 있는데
이걸 select 해서
결과 값
ㅡㅡ > 연필,지우개,볼펜,색종이,책상,의자
이렇게 변환하고 싶습니다.
참고로 순번은 늘어날수도 있고 줄어들수도 있고 가변적입니다.
코드단에서 돌려서 만들면 좋으련... 그게 안되서
쿼리단에서 처리해야 하는 상황입니다.
고수님들의 도움 부탁드립니다.
Comment 4
-
이리
2016.08.10 09:10
-
아싸라비아콜롬비아
2016.08.10 09:41
그런식으로 찾아서 해봤었는데요
기준없이 필드 안나눠지고 그냥 쭉 이어 붙여서 한개의 컬럼에 값을 넣어주고 싶은데...
하단에 그룹하고 for해서 돌리는것을 살짝 변형을 해야 할거 같은데요..
그걸 잘 모르겠네요..
SELECT p.[foo], p.[bar], p.[kin], p.[blat]
FROM
(
SELECT p.Name, o.Quantity
FROM dbo.Products AS p
INNER JOIN dbo.OrderDetails AS o
ON p.ProductID = o.ProductID
) AS j
PIVOT
(
SUM(Quantity) FOR Name IN ([foo],[bar],[kin],[blat]) ㅡㅡㅡㅡ> 이부분
) AS p; -
이리
2016.08.10 10:24
DECLARE @Prod varchar(200)SET @Prod = '';WITH TBL_PIVOTAS(SELECT 1 AS 순번, '연필' AS 품목 UNION ALLSELECT 2 AS 순번, '지우개' AS 품목 UNION ALLSELECT 3 AS 순번, '볼펜' AS 품목 UNION ALLSELECT 4 AS 순번, '색종이' AS 품목 UNION ALLSELECT 5 AS 순번, '책상' AS 품목 UNION ALLSELECT 6 AS 순번, '의자' AS 품목)SELECT @Prod = @Prod + 품목 + ','FROM (SELECT 품목 FROM TBL_PIVOT) ASET @Prod = LEFT(@Prod, LEN(@Prod) - 1)SELECT @Prod이렇게 나오는건가요? -
아싸라비아콜롬비아
2016.08.10 18:22
DECLARE @COUNT VARCHAR(500)
DECLARE @BBB INT
DECLARE @TEXT VARCHAR(4000)
DECLARE @TEXT1 VARCHAR(4000)
SELECT @COUNT = MAX(A.NUM) FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY I.NO_HS) NUM
FROM TR_INVL A INNER JOIN MA_PITEM I
ON A.CD_COMPANY = I.CD_COMPANY
WHERE
AND I.NO_HS IS NOT NULL
GROUP BY I.NO_HS
) A
SET @BBB = 1WHILE @BBB < @COUNT +1
BEGIN
SELECT
@TEXT = BB.NO_HS
FROM
(
SELECT I.NO_HS, ROW_NUMBER() OVER (ORDER BY I.NO_HS) NUM
FROM TR_INVL A INNER JOIN MA_PITEM I
ON A.CD_COMPANY = I.CD_COMPANY
WHERE
AND I.NO_HS IS NOT NULL
GROUP BY I.NO_HS) BB
WHERE NUM = @BBBSET @TEXT1 = ISNULL(@TEXT1,'') + ',' + @TEXT
SET @BBB = @BBB+1;
END
SELECT RIGHT(@TEXT1,LEN(@TEXT1)-1)제가 한건 이런식으로 햇는데
덕분에 한결 간결하게 되었네요
짱짱짱입니다
감사합니다.
https://www.google.co.kr/webhp?hl=ko&ictx=2&sa=X&ved=0ahUKEwjM1oersrHOAhWQq5QKHaGKA2wQPQgD#newwindow=1&hl=ko&q=sql+server+dynamic+PIVOT