[英]'OR' condition in the CASE STATEMENT in stored procedure
我想知道是否有可能發生以下情況:
((CASE WHEN (a = 1 AND b = 1) OR c = 0 THEN xyz ELSE 0))
我可以看到很多用AND而不用OR編寫的CASE。
還有一件事是,需要像這樣的SELECT查詢
Select x,y,z, SUM(( CASE WHEN .....))
從表。
任何幫助將不勝感激
CREATE PROCEDURE abc
@sid int
AS
BEGIN
SELECT
Column1,
Column2,
Column3,
SUM((CASE WHEN ((a = 1 AND b != 0 ) OR (c = 720)) THEN Amount ELSE 0 END))
AS total
FROM view
WHERE sid = @sid
END
我無法對此進行測試,但是您需要執行以下操作。 可能有一種更聰明的編寫方式。
SELECT
Column1,
Column2,
Column3,
SUM(NewAmount) AS TOTAL
FROM
SELECT
Column1,
Column2,
Column3,
CASE
WHEN (a = 1 AND b != 0 ) OR c = 720 THEN Amount
ELSE 0
END
AS NewAmount
FROM
view
GROUP BY
Column1,
Column2,
Column3
這應該工作:
Select
Column1,
Column2,
Column3,
Sum(
Case
When ( ( a = 1 ) And ( b != 0 ) ) Or ( c = 720 ) Then Amount
Else 0
End
) As total
From
view
Where
sid = ...
Group By
Column1, Column2, Column3
如果a,b和c是數字。
如果您想要可讀的解決方案,則可以避免使用多個語句和很多圓括號。
CASE WHEN A OR B OR C THEN amount
ELSE 0
END
<=>
CASE WHEN A THEN amount -- this condition will be evalued first
WHEN B THEN amount -- second
WHEN C THEN amount -- and third
ELSE 0
END
在您的情況下:
CREATE PROCEDURE abc
@sid int
AS
BEGIN
SELECT
Column1,
Column2,
Column3,
[total] = SUM(CASE
WHEN c = 720 THEN Amount
WHEN a = 1 AND b != 0 THEN Amount
ELSE 0
END)
FROM view
WHERE sid = @sid
GROUP BY Column1, Column2, Column3
END
請注意,對於未使用聚合函數包裝的列,您需要使用GROUP BY
。
CREATE FUNCTION [dbo].[abc](@sid int) RETURNS TABLE AS RETURN ( SELECT Column1, Column2, Column3, [total] = SUM(CASE WHEN c = 720 THEN Amount WHEN a = 1 AND b != 0 THEN Amount ELSE 0 END) FROM view WHERE sid = @sid GROUP BY Column1, Column2, Column3 );
然后,我可以使用結果集做任何我想做的事情:
SELECT * FROM [dbo].[abc](1) WHERE Column1 = 'xxx'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.