【发布时间】:2021-03-24 12:16:45
【问题描述】:
我的table1 看起来像:
docid val1 val2 val3 value
----------------------------------
001 1 1 null 10
001 null null null 5
001 1 null 1 20
001 1 null null 7
001 null null null 15
002 null null 1 30
002 null null null 2
我需要作为输出:
- 每
docid -
docid存在的总行数 - 以及这些行的
value的总和 - 符合条件的行数:
val1 = 1 or val2 = 1 or val3 = 1 - 以及这些行的
value的总和
如下:
docid total_rows total_rows_value rows_with_val val_rows_value
001 5 57 3 37
002 2 1 32 2
到目前为止我所拥有的:
select [docid],
count(1) as [rows_with_val],
sum([value]) as [val_rows_value]
from table1
where val1 = 1 or val2 = 1 or val3 = 1
group by [docid]
;
不过,这只会命中。我怎样才能兼顾两者?我通过删除 where 子句来理解,但是我应该把它放在哪里呢?我一直在阅读 case 语句(在我的选择中),但不知道如何在此处应用它。
【问题讨论】:
标签: sql sql-server count pivot aggregate-functions