[SQL] 동적 순서 방향
SQL동적 순서 방향
나는 매개 변수 정렬 열 방향으로 받아들이는 SP를 작성.
나는 동적 SQL을 사용하지 않습니다.
문제는 방향 매개 변수를 설정하여입니다.
이 부분 코드입니다 :
SET @OrderByColumn = 'AddedDate'
SET @OrderDirection = 1;
…
ORDER BY
CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate)
WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible)
WHEN @OrderByColumn = 'AddedBy' THEN AddedBy
WHEN @OrderByColumn = 'Title' THEN Title
END
해결법
-
==============================
1.당신은 항목 하나 ASC 한 DESC BY 두 개의 거의 동일한 순서가, 하나 또는 그 중 다른 하나는 항상 단일 값을 동일을 확인하기 위해 CASE 문을 확장 할 수 :
당신은 항목 하나 ASC 한 DESC BY 두 개의 거의 동일한 순서가, 하나 또는 그 중 다른 하나는 항상 단일 값을 동일을 확인하기 위해 CASE 문을 확장 할 수 :
ORDER BY CASE WHEN @OrderDirection = 0 THEN 1 ELSE CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible) WHEN @OrderByColumn = 'AddedBy' THEN AddedBy WHEN @OrderByColumn = 'Title' THEN Title END END ASC, CASE WHEN @OrderDirection = 1 THEN 1 ELSE CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible) WHEN @OrderByColumn = 'AddedBy' THEN AddedBy WHEN @OrderByColumn = 'Title' THEN Title END END DESC
-
==============================
2.당신은 당신의 데이터를 정렬 ROW_NUMBER를 사용하여 CASE를 단순화하고 효율적으로 편리한 정수 형식으로 변환 할 수 있습니다. 질문 2005 SQL 서버 태그가 특히 때문에
당신은 당신의 데이터를 정렬 ROW_NUMBER를 사용하여 CASE를 단순화하고 효율적으로 편리한 정수 형식으로 변환 할 수 있습니다. 질문 2005 SQL 서버 태그가 특히 때문에
이것은 또한 2 차 및 3 차 종류를 다루는 충분히 쉽게 확장
나는 실제 SELECT 문을 단순화하고 주문 BY에 RBAR 평가의 가능성을 줄일 승수 다시로 사용했습니다
DECLARE @multiplier int; SELECT @multiplier = CASE @Direction WHEN 1 THEN -1 ELSE 1 END; SELECT Columns you actually want FROM ( SELECT Columns you actually want, ROW_NUMBER() OVER (ORDER BY AddedDate) AS AddedDateSort, ROW_NUMBER() OVER (ORDER BY Visible) AS VisibleSort, ROW_NUMBER() OVER (ORDER BY AddedBy) AS AddedBySort, ROW_NUMBER() OVER (ORDER BY Title) AS TitleSort FROM myTable WHERE MyFilters... ) foo ORDER BY CASE @OrderByColumn WHEN 'AddedDate' THEN AddedDateSort WHEN 'Visible' THEN VisibleSort WHEN 'AddedBy' THEN AddedBySort WHEN 'Title' THEN TitleSort END * @multiplier;
-
==============================
3.다음은 그 예이다 :
다음은 그 예이다 :
CREATE PROCEDURE GetProducts ( @OrderBy VARCHAR(50), @Input2 VARCHAR(30) ) AS BEGIN SET NOCOUNT ON SELECT Id, ProductName, Description, Price, Quantity FROM Products WHERE ProductName LIKE @Input2 ORDER BY CASE WHEN @OrderBy = 'ProductNameAsc' THEN ProductName END ASC, CASE WHEN @OrderBy = 'ProductNameDesc' THEN ProductName END DESC END
여기에서:
http://www.dominicpettifer.co.uk/Blog/21/dynamic-conditional-order-by-clause-in-sql-server-t-sql
-
==============================
4.이것은 나를 위해 잘 작동합니다 - (여기서, 순서에 의해, 방향, 페이지 매김)
이것은 나를 위해 잘 작동합니다 - (여기서, 순서에 의해, 방향, 페이지 매김)
parameters @orderColumn int , @orderDir varchar(20), @start int , @limit int select * from items WHERE (items.status = 1) order by CASE WHEN @orderColumn = 0 AND @orderdir = 'desc' THEN items.[category] END DESC, CASE WHEN @orderColumn = 0 AND @orderdir = 'asc' THEN items.[category] END ASC, CASE WHEN @orderColumn = 1 AND @orderdir = 'desc' THEN items.[category] END DESC, CASE WHEN @orderColumn = 1 AND @orderdir = 'asc' THEN items.[category] END ASC, CASE WHEN @orderColumn = 2 AND @orderdir = 'desc' THEN items.[category] END DESC, CASE WHEN @orderColumn = 2 AND @orderdir = 'asc' THEN items.[category] END ASC OFFSET @start ROWS FETCH NEXT @limit ROWS ONLY
-
==============================
5.허용 대답의 컴팩트 버전,하지만 허용 대답으로이 THEN 후 결과 표현식 유형이 같을 경우에만 작동합니다.
허용 대답의 컴팩트 버전,하지만 허용 대답으로이 THEN 후 결과 표현식 유형이 같을 경우에만 작동합니다.
ORDER BY CASE @OrderDirection WHEN 0 THEN CASE @sortColumn WHEN 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN 'Visible' THEN CONVERT(varchar(2), Visible) WHEN 'AddedBy' THEN AddedBy WHEN 'Title' THEN Title END END ASC, CASE @OrderDirection WHEN 1 THEN CASE @sortColumn WHEN 'AddedDate' THEN CONVERT(varchar(50), AddedDate) WHEN 'Visible' THEN CONVERT(varchar(2), Visible) WHEN 'AddedBy' THEN AddedBy WHEN 'Title' THEN Title END END DESC
from https://stackoverflow.com/questions/1147763/dynamic-order-direction by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 SQL_VARIANT 데이터 유형을 사용해야합니까? (0) | 2020.06.10 |
---|---|
[SQL] 지난 3 개월 동안의 데이터를 취득하기위한 SQL 쿼리 (0) | 2020.06.10 |
[SQL] 여러 열 평균 (0) | 2020.06.09 |
[SQL] 젠드 DB를 사용하여 하위 쿼리 작성 (0) | 2020.06.09 |
[SQL] 어떻게이에 상관 이름이 조인 SQL 해결할 수 있습니다? (0) | 2020.06.09 |