sql rownumber () varchar 및 int 값에서 작동하지 않는 절에 의한 sql rownumber () 주문

StackOverflow https://stackoverflow.com/questions/268322

문제

왜 이것이 효과가 없습니까?

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는 동일한 데이터 유형이어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top