.net - 选择参数中的 TSQL 计数

标签 .net t-sql

给出以下查询,该查询将给出给定注册(科目)的姓史密斯的学生人数

SELECT 
  e.EnrolmentId,
  COUNT((CASE WHEN s.Surname LIKE 'Smith' THEN 1 ELSE NULL END)) AS CountIf
FROM 
  Enrolment e
INNER JOIN StudentEnrolment se
  ON e.EnrolmentId = se.EnrolmentId
INNER JOIN Student s
  ON se.StudentId = s.StudentId
GROUP BY
  e.EnrolmentId

是否可以将“Smith”作为参数,例如这样

COUNT((CASE WHEN s.Surname LIKE @Surname THEN 1 ELSE NULL END)) AS CountIf

最佳答案

如果将 COUNT 更改为 SUM,将 ELSE 部分更改为 0 而不是 NULL,它应该可以工作,不是吗?

SELECT 
  e.EnrolmentId,
  SUM((CASE WHEN s.Surname LIKE 'Smith' THEN 1 ELSE 0 END)) AS CountIf
FROM 
  Enrolment e
INNER JOIN StudentEnrolment se
  ON e.EnrolmentId = se.EnrolmentId
INNER JOIN Student s
  ON se.StudentId = s.StudentId
GROUP BY
  e.EnrolmentId

示例:

declare @t as varchar(20)
select @t='ricardo'

declare @ta as table
(
    name varchar(30)
)

insert into @ta
values
('juan'),
('ricardo'),
('pablo')


select
SUM((CASE WHEN name LIKE @t THEN 1 ELSE 0 END)) AS CountIf
from @ta

输出:

CountIf
-----------
1

关于.net - 选择参数中的 TSQL 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533961/

相关文章:

c# - 如何在 dotnet 中将 ""解析为 long ("0")

c# - 将 MenuItem 与列表中的项目动态关联

.net - 自定义 WPF DatePickerTextBox 模板

sql - DATEPART 修复日期

sql-server - 将 Sql 中的行数转换为列格式

c# - 如何在字符串中同时使用 $ 和 @?

.net - Sharepoint 2010将使用哪个版本的.net框架?

sql - 从 sql 查询中排除所有结果的有效方法是什么?

sql-server - SQL Server Management Studio - 串行运行多个存储过程

sql-server - SQL Server for-each,or while row