我有一个包含值列表的表。 -1是空白值:
ID FieldType1A FieldType1B FieldType2A FieldType2B Person
1 15 14 10 -1 1
2 16 -1 12 10 1
3 17 -1 5 6 1
4 6 -1 7 -1 2
...
所以结果应该是:
Person FieldType1 FieldType2
1 4 5
2 1 1
有一个带有用户ID列表的用户表,是否有办法迭代该值列表以在结果集中生成人员列表(0表示字段类型完全有效,因为它只是计数)?我认为T-SQL Column Values Count的答案是朝着我试图前进的方向迈出的一步,但不确定如何组合相同的列(A / B允许答案列表)。那我和我有兴趣将所有有效值组合在一起,而不是试图计算每个有效响应的数量。
答案 0 :(得分:4)
您可以使用CASE
表达式将所有非负1值更改为1,将-1值更改为0,然后将它们相加。
SELECT Person,
SUM(CASE WHEN FieldType1A <> -1 THEN 1 ELSE 0 END) +
SUM(CASE WHEN FieldType1B <> -1 THEN 1 ELSE 0 END) AS FieldType1,
SUM(CASE WHEN FieldType2A <> -1 THEN 1 ELSE 0 END) +
SUM(CASE WHEN FieldType2B <> -1 THEN 1 ELSE 0 END) AS FieldType2
FROM YourTable
GROUP BY Person
答案 1 :(得分:2)
SELECT Person,
count(nullif(FieldType1A, -1)) + count(nullif(FieldType1B, -1)) as FieldType1,
count(nullif(FieldType2A, -1)) + count(nullif(FieldType2B, -1)) as FieldType2
FROM yourtable
GROUP BY person