0

私がこれを持っているとしましょう:

id | col1 | col2 | col3 | col4 | col5 | name
1  | xxx  | xxx  | xxx  |      | xxx  | John
2  |      |      |      | xxx  | xxx  | Peter
3  | xxx  | xxx  | xxx  |      |      | Sam

次のような結果を得るにはどうすればよいですか。

id | filledData | name
1  | 4          | John
2  | 2          | Peter
3  | 3          | Sam

基本的に、データがどの程度「十分に取り込まれている」かを判断するために使用したいセット列があり、それによってそれらを並べ替えて、最初に最小量のデータで列を埋めることができますか?

4

2 に答える 2

1

CASE列がnullであるか、ステートメントを使用していないかを確認する必要があります。

SELECT  ID,
        name,
        CASE WHEN col1 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN col2 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN col3 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN col4 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN col5 IS NOT NULL THEN 1 ELSE 0 END filledData
FROM    tableName
于 2013-02-20T14:07:31.113 に答える
0

これには、複雑なcaseステートメントが必要です。

select id, filledData, name
from (select t.*,
             ((case when col1 is not null then 1 else 0 end) +
              (case when col2 is not null then 1 else 0 end) +
              (case when col3 is not null then 1 else 0 end) +
              (case when col4 is not null then 1 else 0 end) +
              (case when col5 is not null then 1 else 0 end)
             ) as filledData
      from t
     ) t
于 2013-02-20T14:07:30.777 に答える