0

なぜこれが機能しないのですか?

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

しかし、CaseステートメントでShipNoをvarcharにキャストすると、機能しますか?

4

2 に答える 2

4

これが古い投稿であることは認識していますが、これは、この問題に遭遇し、解決策を探している人のためのものです。

SELECT ROW_NUMBER() OVER (ORDER BY  
CASE @OrderBy 
 WHEN 'Supplier' THEN Supplier
END
CASE @OrderBy
 WHEN 'ShipNo' THEN ShipNo 
END 
)

基本的に、各フィールドを独自のケースに入れています。これは、フィールド内のデータ型または値が両方の列で異なる場合、または次のようなエラーが発生した場合にのみ実行してください。

int を varchar に、または varchar を int に変換しようとすると、変換に失敗しました。

于 2010-04-30T14:46:54.090 に答える
1

Books Onlineから:

CASE
WHEN Boolean_expression THEN result_expression 
    [ ...n ] 
[ 
    ELSE else_result_expression 
] 
END

「else_result_expressionとresult_expressionのデータ型は同じであるか、暗黙的な変換である必要があります。」

したがって、SupplierとShipNoは同じデータ型である必要があります。

于 2008-11-06T11:34:44.047 に答える