5

返されるケースステートメントを書く必要があります

“1 of 3” if someone voted in one of three elections, 
“2 of 3” if someone voted in two of three elections, 
“3 of 3” if someone voted in three of three elections, 

問題は、値の一部が varchar であり、一部が null であり、それらを一緒に追加できないことです。これは私の考えですが、私はそれを機能させることができません。

select 
id,
CASE 
     WHEN race1 + race2 + race3 = 0 then '0-3'
     WHEN race1 + race2 + race3 = 1 then '1-3'
     WHEN race1 + race2 + race3 = 2 then '2-3'
     WHEN race1 + race2 + race3 = 3 then '3-3'
     WHEN race1 + race2 + race3 is null then 'Unknown'
 END AS General_Turnout
from test4

http://sqlfiddle.com/#!3/cac66/3

4

3 に答える 3

9

これは機能するはずです:

select 
id,
    CAST( (CASE WHEN race1 IS NOT NULL THEN 1 ELSE 0 END)
   +(CASE WHEN race2 IS NOT NULL THEN 1 ELSE 0 END)
   +(CASE WHEN race3 IS NOT NULL THEN 1 ELSE 0 END) AS CHAR) + '-3'
AS General_Turnout
from test4
于 2012-04-11T02:47:05.570 に答える
0

SQLfiddleに投稿した内容から、NULLは投票しなかったことを意味し、文字列は投票したことを意味すると思います。列race1、race2、およびrace3にある非数値文字列を追加することはできませんが、これは機能するはずです。

SELECT 
  id,
  CAST(
    CASE WHEN race1 IS NOT NULL then 1 ELSE 0 END +
    CASE WHEN race2 IS NOT NULL then 1 ELSE 0 END +
    CASE WHEN race3 IS NOT NULL then 1 ELSE 0 END
  AS CHAR) + '-3' AS General_Turnout
FROM test4
于 2012-04-11T04:41:13.100 に答える
0

null がゼロと見なされるように COELESCE(value,0) を使用する

于 2012-04-11T02:45:32.607 に答える