これは sql server 2005 にあります。 と の 2 つのテーブルがcustomers
ありorders
ます。パラメータを持つストアド プロシージャがありますminimumorders
(0 または 0 より大きい値が可能な値です)。IF ELSE
上記のようなブロックは避けて、CASE
ステートメントで行きたいです。コード内のブロックを回避するために句でCASE
ステートメントを使用する方法はありますか? 現時点では、両方の&ブロックで 5 行が繰り返されています。繰り返したくありません。以下のような問い合わせをお待ちしております。WHERE
IF ELSE
IF
ELSE
CREATE PROC STOREDPROC1
@MinimumOrders INT AS IF @MinimumOrders = 0
BEGIN
SELECT
CUSTOMERID
, (SELECT COUNT(ORDERID) FROM ORDERS O WHERE O.CUSTOMERID = C.CUSTOMERID) AS ORDERS
FROM CUSTOMER C
ENDELSE IF @MinimumOrders = 1
BEGIN
SELECT
CUSTOMERID
, (SELECT COUNT(ORDERID) FROM ORDERS O WHERE O.CUSTOMERID = C.CUSTOMERID) AS ORDERS
FROM CUSTOMER C
WHERE (SELECT COUNT(ORDERID) FROM ORDERS O WHERE O.CUSTOMERID = C.CUSTOMERID) > 0
END
CASE
次のようなステートメントが必要です。残念ながら私にはうまくいきません。
-------------------- 12/20/2011 -- 11:52:34 AM -- Tuesday --------------------
SELECT
CUSTOMERID
, (SELECT COUNT(ORDERID) FROM ORDERS O WHERE O.CUSTOMERID = C.CUSTOMERID) AS ORDERS
FROM CUSTOMER C
AND C.customerid=
CASE @MiniumOrders
WHEN 0 THEN C.CustomerID
WHEN 1 THEN
CASE ( Select COUNT(O.CustomerID) FROM Orders O where O.Customerid = C.customerid )
WHEN 0 THEN 0 -- customer id = 0 means no match
ELSE C.CustomerID
END
END
-------------------- 12/20/2011 -- 11:52:34 AM -- Tuesday --------------------