1

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

  1. CisNULLdoes包含大于A或等于零的值。B或者
  2. 何时CNOT NULL(即“A”或“B”)且指定列(AB)中的值为零或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 <= 0SET决赛中的明显有问题WHERE。我已经编写了一些此类 SP,如果我能提供帮助,我想避免使用复杂的 TSQL...

如何动态获取对子WHERE句中相关列的引用?

谢谢你的时间。

4

1 回答 1

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
)
于 2012-11-16T15:11:42.650 回答