sql rownumber () varchar 및 int 값에서 작동하지 않는 절에 의한 sql rownumber () 주문
-
06-07-2019 - |
문제
왜 이것이 효과가 없습니까?
DECLARE @temp table
(ShipNo int,
Supplier varchar(10)
)
INSERT INTO @temp VALUES (1,'CFA')
INSERT INTO @temp VALUES (1, 'TFA')
INSERT INTO @temp VALUES (2, 'LRA')
INSERT INTO @temp VALUES (2, 'LRB')
INSERT INTO @temp VALUES (3, 'ABC')
INSERT INTO @temp VALUES (4, 'TFA')
Declare @OrderBy varchar(255)
sET @OrderBy = 'Supplier'
SELECT ROW_NUMBER() OVER (ORDER BY
CASE @OrderBy
WHEN 'Supplier' THEN Supplier
WHEN 'ShipNo' THEN ShipNo
END
) AS RowNo,
ShipNo,
Supplier
FROM @temp
그러나 사례 진술서에서 Shipno를 Varchar에 던지면 작동합니까?
해결책
나는 이것이 오래된 게시물이라는 것을 알고 있지만 이것은이 문제에 대해 넘어져 해결책을 찾고있는 사람을위한 것입니다.
SELECT ROW_NUMBER() OVER (ORDER BY
CASE @OrderBy
WHEN 'Supplier' THEN Supplier
END
CASE @OrderBy
WHEN 'ShipNo' THEN ShipNo
END
)
기본적으로 당신은 각 필드를 자체 경우에 넣고 있습니다. 필드 내부의 데이터 유형 또는 값이 열에 대해 또는 다음과 같이 오류가 발생할 때만이를 수행합니다.
int를 Varchar 또는 Varchar로 변환하려고 할 때 변환이 실패했습니다.
다른 팁
온라인 도서에서 :
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
"else_result_expression의 데이터 유형과 결과 _expression은 동일하거나 암시 적 변환이어야합니다."
따라서 공급 업체와 Shipno는 동일한 데이터 유형이어야합니다.
제휴하지 않습니다 StackOverflow