WHERE子句中的SQL查询依赖逻辑

时间:2012-11-16 14:49:07

标签: sql-server sql-server-2008 tsql stored-procedures

我有一张桌子TableX。它包含三列:A INTB INTC VARCHAR(1)(列C的有效值是列的名称' A'或'B')。我需要计算满足以下任一条件的出现次数:

  1. CNULL 包含AB中大于零的值时。或
  2. CNOT NULL(即“A”或“B”)且指定列(AB)中的值为零或{时{1}}。
  3. 我当前的存储过程看起来像

    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子句中的相关列?

    感谢您的时间。

1 个答案:

答案 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
)