1

このクエリを使用しようとしました:

SELECT clientId,
   CountryCode
FROM client
ORDER BY 
CASE 
WHEN CountryCode IS NULL
THEN clientId
ELSE CountryCode
END

しかし、エラーメッセージが表示されました:

メッセージ 8115、レベル 16、状態 5、行 1
数値をデータ型 varchar に変換中に算術オーバーフロー エラーが発生しました。

テーブル構造は次のとおりです。

ClientId    numeric(10,0)
CountryCode char(3)
4

2 に答える 2

8

この SQLfiddle デモでは、説明したエラーが発生します。

データ型ごとに異なる式が必要です。または、優先順位の低いデータ型 (文字列) を優先順位の高いデータ型 (int) と互換性を持たせる必要があります。通常は int を文字列に変換します。

あなたの要件は明確ではありませんが、より簡単な方法は、単純に順番に注文することです. 例えば:

SELECT clientId, CountryCode
FROM dbo.client
ORDER BY CountryCode, clientId;

SQLfiddle デモ

条件を導入することもできますが、必須ではないようです。

SELECT clientId,
   CountryCode
FROM dbo.client
ORDER BY CountryCode, CASE 
WHEN CountryCode IS NULL
THEN clientId END;

SQLfiddle デモ

...またはこれは、少し異なる方法で注文します...

SELECT clientId,
   CountryCode
FROM dbo.client
ORDER BY CASE 
WHEN CountryCode IS NULL
THEN clientId END, CountryCode;

SQLfiddle デモ

繰り返しますが、要件が不明確です。どちらも、希望する結果が得られない可能性があります。期待する出力を正確に示していただければ、必要なコードを作成できます。

于 2013-11-05T21:10:26.190 に答える
-2

エラー SQL サーバーは、クエリから次のように定義します。 メッセージ 8114、レベル 16、状態 5、行 1 データ型 nvarchar を数値に変換中にエラーが発生しました。varchar 列 ( CountryCode ) を数値に変換できないことを明確に示しています

SELECT clientId, CountryCode FROM client 
ORDER BY 
  CASE 
    WHEN CountryCode IS NULL THEN clientId 
    ELSE CountryCode 
END

これでクエリを変更します。正常に動作します。

SELECT clientId, CountryCode FROM client 
ORDER BY 
CASE 
  WHEN clientId IS NULL THEN CountryCode 
  ELSE CountryCode 
END

またはあなたが使用することができます

SELECT clientId, CountryCode
FROM client
ORDER BY  
   CASE 
      WHEN CountryCode IS NULL 
         THEN Right(100000000000 + clientId, 10)
      ELSE CountryCode 
 END
于 2013-11-05T20:51:01.393 に答える