【发布时间】:2018-01-15 22:51:58
【问题描述】:
我正在尝试创建一个返回多个计数的 SQL 语句。下面的计数按我的预期工作,但 case 语句忽略了我的查询的 where 子句。
我正在尝试获取满足 where 条件的 PacketId 的总数。然后获得第二个总数,显示满足 where 条件且 StatusId 为 3 的 PacketId 的总和。
*edit Table1 和 Table2 共享 PacketId 作为外键。
Select
Count(Distinct wpq.PacketId) AS Total,
SUM(Case When wpq.StatusId = 3 THEN 1 ELSE 0 END) as OtherCount
FROM [Table1] ppo JOIN [Table2] wpq ON ppo.PacketId = wpq.PacketId
WHERE wpq.CreateDate between '11/1/2017' and '1/1/2018' and ppo.IsSelected = 1
【问题讨论】:
-
您是否有数据样本以及当前返回的内容?这可能有助于弄清楚为什么 case 语句没有返回你想要的。
-
您是在寻找唯一
StatusIDs 的数量还是总数?关于 CASE 语句的语法没有什么不正确的,所以你的逻辑有问题。此外,您在 WHERE 子句中隐式转换为日期。请使用正确的格式模型明确执行此操作以避免错误。最后,这是 SQL Server 吗? -
您的查询看起来像 T-SQL,但您应该始终在标签中指明 dbms 类型。
sql本身通常是不够的。 +fyi:正确的术语是case expression(不是 case 语句),因为它们评估为单个值。 -
正确标记!!!这是哪个dbms????
-
如果是 SQL Server,则添加 SQL Server 标签。如果有人让你查询错误的 dbms,那就没用了。
标签: sql sql-server tsql case-when