[SQL] 여러 열이있는 SQL 피벗
SQL여러 열이있는 SQL 피벗
SQL Server 2008의 피벗 절과 도움이 필요하십니까. 나는이 정보가있는 테이블이 있습니다
Weekno 된 요일 FROMTIME TOTIME 1 2 10시 14시 1~3 10시 14시 2 3 8시 13시 2-4 9시 13시 2~5 14시 22시 3 1 6시 13시 3 4 6시 13시 3-5 14시 22시
나는 모습이 좋아하는 테이블에이를 변환 할 : 주 Start1 END1 START2 END2 Start3 End3 Start4 End4 Start5 End5 Start6 End6 Start7 End7 1 10시 14시 10시 14시 2 8시 13시 9시 13시 14시 22시 3 6시 13시 6시 13시 14시 22시
피벗 쿼리와 함께 할 수있는 방법이 있습니까? 그것을 수행하는 방법에 대한 예제와 함께 응답을 보냅니다.
나는이에 대한 도움말의 모든 종류를 주셔서 감사합니다. 미리 감사드립니다.
해결법
-
==============================
1.여기에 피벗 버전입니다 :
여기에 피벗 버전입니다 :
https://data.stackexchange.com/stackoverflow/query/7295/so3241450
-- SO3241450 CREATE TABLE #SO3241450 ( Weekno int NOT NULL ,DayOfWeek int NOT NULL ,FromTime time NOT NULL ,ToTime time NOT NULL ) INSERT INTO #SO3241450 VALUES (1, 2, '10:00', '14:00') ,(1, 3, '10:00', '14:00') ,(2, 3, '08:00', '13:00') ,(2, 4, '09:00', '13:00') ,(2, 5, '14:00', '22:00') ,(3, 1, '06:00', '13:00') ,(3, 4, '06:00', '13:00') ,(3, 5, '14:00', '22:00') ;WITH Base AS ( SELECT Weekno, DayOfWeek, FromTime AS [Start], ToTime AS [End] FROM #SO3241450 ) ,norm AS ( SELECT Weekno, ColName + CONVERT(varchar, DayOfWeek) AS ColName, ColValue FROM Base UNPIVOT (ColValue FOR ColName IN ([Start], [End])) AS pvt ) SELECT * FROM norm PIVOT (MIN(ColValue) FOR ColName IN ([Start1], [End1], [Start2], [End2], [Start3], [End3], [Start4], [End4], [Start5], [End5], [Start6], [End6], [Start7], [End7])) AS pvt
-
==============================
2.나는 개인적으로 읽기 어려운 pivots-하고 다루기 싫어.
나는 개인적으로 읽기 어려운 pivots-하고 다루기 싫어.
CREATE TABLE #test ( WeekNo int, [DayOfWeek] int, FromTime time, ToTime time ) INSERT INTO #test SELECT 1,2,'10:00','14:00' UNION ALL SELECT 1,3,'10:00','14:00' UNION ALL SELECT 2,3,'08:00','13:00' UNION ALL SELECT 2,4,'09:00','13:00' UNION ALL SELECT 2,5,'14:00','22:00' UNION ALL SELECT 3,1,'06:00','13:00' UNION ALL SELECT 3,4,'06:00','13:00' UNION ALL SELECT 3,5,'14:00','22:00' SELECT WeekNo, MAX(CASE WHEN DayOfWeek = 1 THEN FromTime ELSE NULL END) AS Start1, MAX(CASE WHEN DayOfWeek = 1 THEN ToTime ELSE NULL END) AS End1, MAX(CASE WHEN DayOfWeek = 2 THEN FromTime ELSE NULL END) AS Start2, MAX(CASE WHEN DayOfWeek = 2 THEN ToTime ELSE NULL END) AS End2, MAX(CASE WHEN DayOfWeek = 3 THEN FromTime ELSE NULL END) AS Start3, MAX(CASE WHEN DayOfWeek = 3 THEN ToTime ELSE NULL END) AS End3, MAX(CASE WHEN DayOfWeek = 4 THEN FromTime ELSE NULL END) AS Start4, MAX(CASE WHEN DayOfWeek = 4 THEN ToTime ELSE NULL END) AS End4, MAX(CASE WHEN DayOfWeek = 5 THEN FromTime ELSE NULL END) AS Start5, MAX(CASE WHEN DayOfWeek = 5 THEN ToTime ELSE NULL END) AS End5, MAX(CASE WHEN DayOfWeek = 6 THEN FromTime ELSE NULL END) AS Start6, MAX(CASE WHEN DayOfWeek = 6 THEN ToTime ELSE NULL END) AS End6, MAX(CASE WHEN DayOfWeek = 7 THEN FromTime ELSE NULL END) AS Start7, MAX(CASE WHEN DayOfWeek = 7 THEN ToTime ELSE NULL END) AS End7 FROM #test GROUP BY WeekNo
그리고 피벗의 오프 양말을 날려 버릴거야; 성능 현명한.
-
==============================
3.나는이 사건을 생각하는 것 그것은 단지 나머지에서 최신 시작 시간과 종료 시간 및 필터의 레코드를 반환합니다로만 독특한 Weekno와 DAYOFWEEK가있는 경우에만 작동합니다. 예
나는이 사건을 생각하는 것 그것은 단지 나머지에서 최신 시작 시간과 종료 시간 및 필터의 레코드를 반환합니다로만 독특한 Weekno와 DAYOFWEEK가있는 경우에만 작동합니다. 예
Weekno DayOfWeek FromTime ToTime 1 2 10:00 14:00 1 2 07:00 09:00 2 3 08:00 13:00 2 4 09:00 13:00
그것은 단지 DAYOFWEEK 2 weekno 1의 첫 번째 행을 반환하고, 제 2 열을 이동한다.
from https://stackoverflow.com/questions/3241450/sql-pivot-with-multiple-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 PL / SQL에서 기존 테이블에 추가하기 전에 열이 존재하는지 확인? (0) | 2020.06.08 |
---|---|
[SQL] 나는 JDBC 응용 프로그램에서 PreparedStatement.cancel ()를 호출 할 때, 실제로 오라클 데이터베이스에 죽일 수 있습니까? (0) | 2020.06.08 |
[SQL] 오라클 SQL의 SUM 함수가 같은 제품 기능은 무엇입니까? (0) | 2020.06.08 |
[SQL] 나는 SQL 서버의 XML 값에서 요소 이름의 목록을 얻을 수있는 방법 (0) | 2020.06.08 |
[SQL] SQL 서버 데이터 변경 사항을 감사 (0) | 2020.06.08 |