我正在尝试计算记录字段具有值的次数,以便稍后在应用程序中报告该次数。
我使用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澄清:我实际上不需要在结果中列出列和值。我只需要每条记录的准确计数。我只是想在我的问题中说明“事件值”和记录值之间的关系。
感谢您的所有建议和投入。
发布于 2017-07-31 05:06:00
只需使用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;发布于 2017-07-31 05:17:49
或解码;)
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发布于 2017-07-31 07:52:13
可以在不列出所有列名的情况下使用动态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)https://stackoverflow.com/questions/45404632
复制相似问题