我有一张桌子TableX
。它包含三列:A
INT
,B
INT
和C
VARCHAR(1)
(列C的有效值是列的名称' A'或'B')。我需要计算满足以下任一条件的出现次数:
C
为NULL
而 包含A
或B
中大于零的值时。或C
为NOT NULL
(即“A”或“B”)且指定列(A
或B
)中的值为零或{时{1}}。我当前的存储过程看起来像
NULL
问题是我需要检查CREATE PROCEDURE ispcSomeName @NumOcc INT OUTPUT
AS
SELECT COUNT(*) AS [NumOcc]
FROM TableName
WHERE (C IS NULL
AND ((A IS NOT NULL OR A > 0) OR
(B IS NOT NULL OR B > 0)))
OR (CritCarType IS NOT NULL
AND (CASE SET @TmpColumnName = CritCareType
WHEN N'A' THEN (A IS NULL OR A <= 0)
WHEN N'B' THEN (B IS NULL OR B <= 0)))
GO
引用的列。如果是C
,我需要检查是否C = 'A'
。最终A IS NOT NULL OR A <= 0
中的SET
显然存在问题。我有一些这类SP用于创作,如果我可以帮助它,我想避免复杂的TSQL ......
如何动态引用WHERE
子句中的相关列?
感谢您的时间。
答案 0 :(得分:3)
Select Count(*)
from tab
where
(
C is null and (Coalesce(A,0)>0 or Coalesce(B,0)>0)
)
or
(
C is not null and Case when C='A' then Coalesce(A,0)
when C='B' then Coalesce(B,0) end <=0
)