SQl:按分组时计数内的大小写

SQl:按分组时计数内的大小写,sql,Sql,我有一个系统,需要用户填写一些图表。他们可以填写任意数量的表格,但至少必须填写2份。我需要建立一个SQL调用,计算填写了多少表单,但最多只能计算每人2个表单 除了Count()函数外,所有功能都正常工作 Select mappingid, formTypeId as "Form Type", abbreviation, Count( case when formtypeid >= 2 then 2 else formTypeID end) as "Chart Count"

我有一个系统,需要用户填写一些图表。他们可以填写任意数量的表格,但至少必须填写2份。我需要建立一个SQL调用,计算填写了多少表单,但最多只能计算每人2个表单

除了
Count()
函数外,所有功能都正常工作

Select mappingid, formTypeId as "Form Type", abbreviation, 
   Count( case when formtypeid >= 2 then 2 else formTypeID end) as "Chart Count"
        From tables.dbo.forms
        where questions = answered and formtypeid = 3
        group by mappingid, formtypeid, abbreviation;
第7行,最后一列应打印出2,而不是4

编辑-添加数据

试试这个

Select mappingid, formTypeId as "Form Type", abbreviation,
case when count(formtypeid) >= 2 then 2 else Count(formTypeID) end as "Chart Count"
From tables.dbo.forms
where questions = answered and formtypeid = 3
group by mappingid, formtypeid, abbreviation;

如果我理解正确,您只需将计数限制为最多2:

Select mappingid, formTypeId as FormType, abbreviation, 
       (case when count(*) > 2 then 2 else count(*) end) as ChartCount
From tables.dbo.forms
where questions = answered and formtypeid = 3
group by mappingid, formtypeid, abbreviation;

请将表格中的样本数据发布为well@Regis,如果我错了,请纠正我。但我认为不仅仅是第7行,因为运算符大于或等于(>=),也就是说,第1、2、4、5和7行将变为2。如果只需要第7行,则只需要大于(>2)而不需要(>=2),如果大于等于2,则无论如何都会打印出第2行。所以,是的,这两种方法(理论上)都有效。@Regis,我明白了。。那么希望我下面的回答对你有用:)谢谢你的建议,但这会把第三栏的内容改为2。@Regis,真的吗?第三列,但是我只更改了第4列中的逻辑,以使您的
计数
函数工作。@Regis,我明白了。。第二栏是你的表单,上面的答案已经修改过了,看看它是否有效。。我误解了你的问题,下次在你的屏幕截图上加上列名:)对不起。。我修改了我的答案。对不起,第四栏。由于语法错误,我不得不移动你文章中的一个括号,而不是因为它可以工作。谢谢大家!@approxiblue,感谢您更正关闭括号的错误位置:)