WHEN 句ごとに新しい「乱数」が計算されます - 代わりに派生テーブルを使用できます:
SELECT ID, Name, Channel = CASE Rand WHEN 0 THEN 'Baby Only' WHEN 1 THEN 'Club' WHEN 2 THEN 'Drug' WHEN 3 THEN 'Food' WHEN 4 THEN 'Internet' WHEN 5 THEN 'Liquidators' WHEN 6 THEN 'Mass' WHEN 7 THEN 'Military' WHEN 8 THEN 'Other' WHEN 9 THEN 'Speciality' ELSE '*NONE*' -- How is this ever getting reached? END FROM ( SELECT id, name, ABS(CHECKSUM(NewId())) % 10 Rand FROM retailshelf_nil...account A ) zzz;
プレ>または CROSS APPLY サブクエリ:
SELECT A.ID, A.Name, Channel = CASE zzz.Rand WHEN 0 THEN 'Baby Only' WHEN 1 THEN 'Club' WHEN 2 THEN 'Drug' WHEN 3 THEN 'Food' WHEN 4 THEN 'Internet' WHEN 5 THEN 'Liquidators' WHEN 6 THEN 'Mass' WHEN 7 THEN 'Military' WHEN 8 THEN 'Other' WHEN 9 THEN 'Speciality' ELSE '*NONE*' -- How is this ever getting reached? END FROM retailshelf_nil...account A CROSS APPLY ( SELECT ABS(CHECKSUM(NewId())) % 10 ) zzz (Rand);
プレ>その方法
NewID()
レコードごとに 1 回だけ呼び出されます。同様のシナリオが解決されました こちら .
T-SQL ドキュメント この現象を説明しています (Sybase の場合ですが、SQL Server にも当てはまるようです):