1

私はテーブルを持っていますTableXA INTこれには、、、B INTおよびC VARCHAR(1)(列Cの有効な値は列「A」または「B」の名前)の3つの列が含まれます。次のいずれかの条件が満たされた場合の発生数をカウントする必要があります。

  1. CisNULLおよびdoesに、ゼロ以上のA値が含まれている場合。Bまた
  2. が(CつまりNOT NULL、「A」または「B」)であり、指定された列(AまたはB)の値がゼロまたは。の場合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ファイナルのに問題があることは明らか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 に答える