[SQL] 열로 날짜를 동적으로 회동하는 방법
SQL열로 날짜를 동적으로 회동하는 방법
나는 제품 ID의와 이름, 특정 날짜에 이러한 제품의 주식을 가진 다른 테이블과 테이블이 있습니다. 이러한 항목 1로 2014년 1월 1일 6 주식과 2014년 2월 1일 8 주식을 가지고 있었다. 나는 그것이 세포에서 사용할 수있는 모든 달의 날짜와 재고를 보여, 달력처럼 보이도록 저장 프로 시저에 다음을 표시하기 위해 노력하고있어. 이 보여줄 수있는 가장 좋은 방법은 무엇입니까?
예를 들면 :
Name | 1-1-2014 | 2-1-2014 | 3-1-2014 | 4-1-2014
Item1 | 6 | 8 | | 6
Item2 | | 2 | 1 |
원래 테이블 - 이름
ID | Name
1 | Item1
2 | Item2
원래 테이블 - Stockdates
ID | NameID | Stock | Date
1 | 1 | 8 | 2-1-2014
2 | 2 | 2 | 4-1-2014
해결법
-
==============================
1.다음은 샘플 테이블입니다
다음은 샘플 테이블입니다
SELECT * INTO #Names FROM ( SELECT 1 ID,'ITEM1' NAME UNION ALL SELECT 2 ID,'ITEM2' NAME )TAB SELECT * INTO #Stockdates FROM ( SELECT 1 ID,1 NAMEID,8 STOCK,'2-1-2014 ' [DATE] UNION ALL SELECT 2 ID,2 NAMEID,2 STOCK,'4-1-2014 ' [DATE] )TAB
(가) 임시 테이블에 데이터를 결합 넣어
SELECT N.NAME,S.[DATE],S.STOCK INTO #TABLE FROM #NAMES N JOIN #Stockdates S ON N.ID=S.NAMEID
피벗에 대한 열을 받기
DECLARE @cols NVARCHAR (MAX) SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', '[' + CONVERT(NVARCHAR, [DATE], 106) + ']') FROM (SELECT DISTINCT [DATE] FROM #TABLE) PV ORDER BY [DATE]
이제 피벗
DECLARE @query NVARCHAR(MAX) SET @query = ' SELECT * FROM ( SELECT * FROM #TABLE ) x PIVOT ( SUM(STOCK) FOR [DATE] IN (' + @cols + ') ) p ' EXEC SP_EXECUTESQL @query
그리고 당신의 결과는 여기
-
==============================
2.1 단계 - 갭 채우기 (아마도 필요하지 않음)
1 단계 - 갭 채우기 (아마도 필요하지 않음)
당신의 주식 테이블은 모든 제품에 대한 매일에서 주식을 포함하지 않는 경우에 당신은 다른 곳에서 한 달에 모든 날짜를 얻을 수 있습니다. 당신은 재귀 CTE로를 생성 할 수 있습니다 (변수 선언이 생략)
with dates as ( select @startdate as [date] union ALL select [date] + 1 from dates where [date] < @enddate ) select @strDays = COALESCE(@strDays + ', ['+ convert(varchar(8), [date],112) + ']', '['+ convert(varchar(8), [date],112) + ']') from dates;
당신은 원하는 날짜 형식을 사용할 수 있지만 모든 쿼리에 유지하는 것이 중요합니다.
2 단계 - 일반적인 형태의 데이터를 통합 할 수 있습니다. 당신은 임시 테이블에 저장하도록 선택할 수 있습니다 또는 당신은 CTE를 다시 사용하고 3 단계로이 단계를 결합 할 수 있습니다.
이 같은 표를 얻을 수 있도록 제품 (위에서) 날짜 (전체)과 주식으로 가입 (왼쪽) :
date product_id items
재고가없는 제품과 날짜를 들어 당신은 트릭을 할 것입니다 0 ISNULL을 표시합니다. 확인 날짜 열은 위의 CTE과 동일한 형식으로 VARCHAR로 변환됩니다.
3 단계 - 피벗 동적 쿼리 날짜 열하여 (단계 2에서 수득) 테이블.
나는 지금 당신에게 더 많은 세부 사항이 아닌를 제공 할 수 있습니다. 당신은 다른 응답 비슷한 것을 볼 수 있습니다 : 다른 컬럼에 걸쳐 고유 값
from https://stackoverflow.com/questions/27422109/how-to-pivot-dynamically-with-date-as-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다중 열 외래 키 제약 조건 (0) | 2020.05.28 |
---|---|
[SQL] Extbase은 - 쿼리에서 SQL을 생성 얻을 (0) | 2020.05.28 |
[SQL] PostgreSQL을 데이터베이스에 이미지를 삽입 (0) | 2020.05.28 |
[SQL] SQL 문자열에 문자열의 첫 번째 발생을 교체 (0) | 2020.05.28 |
[SQL] 초없는 시간 값 데이터로부터 추출하는 방법 (0) | 2020.05.28 |