我正在尝试计算记录字段具有值的次数,以便我可以稍后在应用程序中报告该数字。
我使用COUNT和GROUP BY找到了各种方法的几个答案,但结果都是整个表格总出现次数的总和。
我试图将计数限制在每条记录中。
Table Example:
COL-1 COL-2 COL-3 COL-4
VALUE VALUE
VALUE VALUE
VALUE VALUE VALUE
VALUE
我需要计算每个记录的字段数量出现的次数。
类似于:
Result Concept:
COL-1 COL-2 COL-3 COL-4 Occurrences
VALUE VALUE 2
VALUE VALUE 2
VALUE VALUE VALUE 3
VALUE 1
澄清: 我实际上不需要在结果中列出列和值。我只需要每个记录的准确计数。 我只是想在我的问题中说明“出现次数 - 值”与记录值之间的关系。
感谢您提出的所有建议和意见。
答案 0 :(得分:1)
只需使用case
:
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)
) as occurrences
from t;
答案 1 :(得分:0)
或解码;)
select t.*, DECODE(col1,null,0,1)+DECODE(col2,null,0,1)+
DECODE(col3,null,0,1)+DECODE(col4,null,0,1) cnt
from my_table t
答案 2 :(得分:0)
您可以使用动态SQL而不列出所有列名
DECLARE @sql VARCHAR(MAX)
DECLARE @tbl VARCHAR(100)
SET @tbl = 'sampletable' -- put your table name here
SET @sql = 'SELECT *, '
SELECT @sql = @sql + '(CASE WHEN ' + cols.name + ' IS NOT NULL THEN 1 ELSE 0 END) ' + '+'
FROM sys.columns cols
WHERE cols.object_id = object_id(@tbl);
SET @sql = LEFT(@sql, LEN(@sql) - 1)
SET @sql = @sql + ' AS occurrences FROM ' + @tbl
EXEC(@sql)