【发布时间】:2015-07-17 11:09:18
【问题描述】:
我确实有一个表格,其中一行(类型 =E)与另一行相关。 我已经编写了查询来返回这些相关行的 COUNT。问题是没有明确的关系(比如 ID 列会清楚地说明哪一行与另一行相关)。因此,我试图根据 WHERE 子句中的多个条件查找关系。
问题在于,在少数情况下,列 A 和 B 可能为 NULL(对于 TYPE = 'M' 的记录)。在这种情况下,我想忽略那个条件,所以它只会使用前 3 个条件来确定关系。
我尝试了 CASE 语句,但没有按预期工作:
SELECT [T1].[ID],[T1].[AlphaId],[T1].[Type],[T1].[A],[T1].[B],[T1].[Date],[T1].[ServiceID]
,( SELECT COUNT(*)
FROM MyTable T2
WHERE [T1].[AlphaId]=[T2].[AlphaId] AND
[T1].[Date]=[T2].[Date] AND
[T1].[ServiceID]=[T2].[ServiceID] AND
[T2].[A]=CASE WHEN [T2].[A] IS NULL THEN NULL ELSE [T1].[A] END AND
[T2].[B]=CASE WHEN [T2].[B] IS NULL THEN NULL ELSE [T1].[B] END AND
[T2].[Type]='M'
) as TotalCount
FROM MyTable T1
WHERE [T1].[Type] = 'E'
我不能忽略这种情况,因为在某些情况下,Date、ServiceID 可能相同,但是它们的 A、B 不同。幸运的是,在 A、B 为 NULL 的情况下,这两条记录不同的是 Date、ServiceID。
http://sqlfiddle.com/#!3/c98db/1
提前非常感谢。
【问题讨论】:
-
嗨,这与我的查询相同,只是添加了括号
标签: sql-server tsql subquery