UPC, 월 # 및 주 #이 세 개의 기본 열이 포함 된 테이블이 있습니다. (아래 스크린 샷)피벗 함수를 사용하여 SQL Server의 한 열 내에서 여러 값 또는 열을 결합하는 방법은 무엇입니까?
가능 뷰를 만들거나 각각의 고유 한 UPC 하나의 열에 그룹 주 번호가 너무 많은 행을 표시하는 것이있을 것 테이블을 표시하는 것입니다. (이런 예)
내가 그룹화하여 그룹으로 피벗 기능을 사용해야합니까이를 달성하기 위해 SETS?감사합니다.
UPC, 월 # 및 주 #이 세 개의 기본 열이 포함 된 테이블이 있습니다. (아래 스크린 샷)피벗 함수를 사용하여 SQL Server의 한 열 내에서 여러 값 또는 열을 결합하는 방법은 무엇입니까?
가능 뷰를 만들거나 각각의 고유 한 UPC 하나의 열에 그룹 주 번호가 너무 많은 행을 표시하는 것이있을 것 테이블을 표시하는 것입니다. (이런 예)
내가 그룹화하여 그룹으로 피벗 기능을 사용해야합니까이를 달성하기 위해 SETS?감사합니다.
MS SQL 서버 2008 스키마 설정 : 1
검색어 :
DECLARE @TABLE TABLE (RecordID INT, UPC BIGINT, MonthNumberOnPromo INT, WeekNumberOnPromo INT)
INSERT INTO @TABLE VALUES
(1 , 2529230005 , 1 , 1) , (2 , 2529230005 , 2 , 6),
(3 , 2529230005 , 3 , 11) , (4 , 2529230005 , 4 , 15),
(5 , 2529230005 , 6 , 22) , (6 , 2529230005 , 7 , 27),
(7 , 2529230005 , 8 , 31) , (8 , 2529230005 , 9 , 35),
(9 , 2529230007 , 1 , 1) , (10 , 2529230007 , 2 , 6),
(11 , 2529230007 , 3 , 11) , (12 , 2529230007 , 4 , 15),
(13 , 2529230007 , 6 , 22) , (14 , 2529230007 , 8 , 31),
(15 , 2529230007 , 9 , 35) , (16 , 2529230007 , 10 , 38),
(17 , 2529230007 , 12 , 51)
SELECT *
FROM (
SELECT t.UPC
,LEFT(DATENAME(MONTH , '1900' + RIGHT('00'
+ CAST(t.MonthNumberOnPromo AS NVARCHAR(2)),2) + '01') , 3) AS [Month]
,'Yes' AS Value
,STUFF((SELECT ',' + CAST(WeekNumberOnPromo AS NVARCHAR(10))
FROM @TABLE
WHERE t.UPC = UPC
FOR XML PATH(''),TYPE)
.value('.','NVARCHAR(MAX)'),1,1,'') AS [Week_List]
FROM @TABLE t
GROUP BY t.UPC
,LEFT(DATENAME(MONTH , '1900' + RIGHT('00'
+ CAST(t.MonthNumberOnPromo AS NVARCHAR(2)),2) + '01') , 3)
)t
PIVOT (MAX(Value)
FOR [Month]
IN ([JAN],[FEB],[MAR],[APR],[MAY],[JUN],[JUL],[AUG],[SEP],[OCT],[NOV],[DEC])
)p
Results :
| UPC | WEEK_LIST | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC |
|------------|--------------------------|-----|-----|-----|-----|--------|-----|--------|-----|-----|--------|--------|--------|
| 2529230005 | 1,6,11,15,22,27,31,35 | Yes | Yes | Yes | Yes | (null) | Yes | Yes | Yes | Yes | (null) | (null) | (null) |
| 2529230007 | 1,6,11,15,22,31,35,38,51 | Yes | Yes | Yes | Yes | (null) | Yes | (null) | Yes | Yes | Yes | (null) | Yes |
감사합니다. M.Ali. '19000101'의 의미를 알 수 있습니까? – user3486647
당신은 정수 값으로 저장된 달이 있기 때문에 Case 문을 사용할 수도 있었지만 그 달 번호를 모의 날짜 값으로 변환 한 다음'DATENAME()'함수를 사용하여 그 날짜 값에서 월 이름을 가져 왔습니다. –
또한 자세히 보겠습니다. 나는 정수형 월을 처음으로 12 개월로 변환하면 19000101에 12 개월을 추가하고 19010101의 날짜 값에서 1 월을 반환하는 방식을 변경했습니다. –
STUFF 및 FOR XML을 사용할 수 있습니다. http://www.sqlservercentral.com/articles/comma+separated+list/71700/ –