PIVOT
쿼리에 사용할 Common Table Expression (CTE)
을 SQL Server 2008
에 구축하고 있습니다.양쪽 끝에 varchar 문자열을 숫자 값으로 올바르게 정렬하는 방법은 무엇입니까?
중간에 문자열 데이터를 샌드위치하는 숫자 값이 있기 때문에 출력을 올바르게 정렬하는 데 어려움이 있습니다. 이것을 할 수 있습니까?
이 예는 빠르고 간단한 예이며 실제 검색어는 몇 년 동안 가치가 있습니다.
예 :
Declare @startdate as varchar(max);
Declare @enddate as varchar(max);
Set @startdate = cast((DATEPART(yyyy, GetDate())-1) as varchar(4))+'-12-01';
Set @enddate = cast((DATEPART(yyyy, GetDate())) as varchar(4))+'-03-15';
WITH DateRange(dt) AS
(
SELECT CONVERT(datetime, @startdate) dt
UNION ALL
SELECT DATEADD(dd,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, @enddate)
)
SELECT DISTINCT ',' + QUOTENAME((cast(DATEPART(yyyy, dt) as varchar(4)))+'-Week'+(cast(DATEPART(ww, dt) as varchar(2)))) FROM DateRange
전류 출력 :
,[2012-Week48]
,[2012-Week49]
,[2012-Week50]
,[2012-Week51]
,[2012-Week52]
,[2012-Week53]
,[2013-Week1]
,[2013-Week10]
,[2013-Week11]
,[2013-Week2]
,[2013-Week3]
,[2013-Week4]
,[2013-Week5]
,[2013-Week6]
,[2013-Week7]
,[2013-Week8]
,[2013-Week9]
원하는 출력 :
,[2012-Week48]
,[2012-Week49]
,[2012-Week50]
,[2012-Week51]
,[2012-Week52]
,[2012-Week53]
,[2013-Week1]
,[2013-Week2]
,[2013-Week3]
,[2013-Week4]
,[2013-Week5]
,[2013-Week6]
,[2013-Week7]
,[2013-Week8]
,[2013-Week9]
,[2013-Week10]
,[2013-Week11]
EDIT 물론
질문을 게시 한 후 두뇌가 작동하기 시작했습니다. DATEADD
을 1 일 대신 1 주 추가 한 다음, DISTINCT
을 선택하여 꺼냈다.
DECLARE @startdate AS VARCHAR(MAX);
DECLARE @enddate AS VARCHAR(MAX);
SET @startdate = CAST((DATEPART(yyyy, GetDate())-1) AS VARCHAR(4))+'-12-01';
SET @enddate = CAST((DATEPART(yyyy, GetDate())) AS VARCHAR(4))+'-03-15';
WITH DateRange(dt) AS
(
SELECT CONVERT(datetime, @startdate) dt
UNION ALL
SELECT DATEADD(ww,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, @enddate)
)
SELECT ',' + QUOTENAME((CAST(DATEPART(yyyy, dt) AS VARCHAR(4)))+'-Week'+(CAST(DATEPART(ww, dt) AS VARCHAR(2)))) FROM DateRange
나쁜 접근 방법처럼 보입니다. 문자열로 시작하여 datetimes에 캐스팅하고 쿼리를 실행 한 다음 다시 문자열로 변환합니다. 왜 datetimes로 시작하고, 쿼리를 실행하고, 형식화 된 날짜를 출력하지 않고 실제 날짜로 정렬합니까? –
피벗 테이블 Im은 실제 날짜를 저장하지만 수정 된 율리우스 형식으로 저장하기 때문에. 필자는 지난 수개월에 걸친 요일별로 피벗을 만들어야합니다. 이것은 전반적인 솔루션의 첫 번째 분기 일 뿐이지 만 필자가 필요로하는 것입니다. 이것에 관해서는 지나치게 성능에 관심이없는 Im은 한 달에 한 번 실행되어 합리적인 시간 내에 완료됩니다. 더 나은 방법이있을 수 있습니다. 그러나 이것이 제가 지금 해결책으로 가지고있는 것입니다. – ProfessionalAmateur