美好的一天。我有一個腳本查看錶格,並對列[vCheck]
執行一些邏輯。邏輯運行不正常。表A粘貼在下面。如何通過每行的Case語句設置一個值
如果條件爲真,則聲明應該將該關聯行設置爲0.它當前將同一個typeCol
的所有關聯行設置爲0.我如何根據groupid按順序個性化每行的條件爲vCheck
設置唯一值?我嘗試使用遊標方法,IF,而表變量,並更新,並導致相同的問題。
表A
groupid eventid numid tagVal greaterThan greaterEqThan lessThan lessEqThan equalTo typeCol vCheck activeid actVal
28 18 9000002 0 NULL NULL NULL NULL NULL 0 1 70 0
28 18 9000001 NULL NULL NULL 105 NULL NULL 3 1 68 74.9101
28 18 9001767 NULL NULL NULL 10 NULL NULL 3 1 69 9.95535
9 19 9000002 0 NULL NULL NULL NULL NULL 0 1 70 0
9 19 9000001 NULL NULL NULL 105 NULL NULL 3 1 68 74.9101
9 19 9001767 NULL 10 NULL NULL NULL NULL 1 1 69 9.95535
10 20 9000002 0 NULL NULL NULL NULL NULL 0 1 70 0
10 20 9000001 NULL 105 NULL NULL NULL NULL 1 1 68 74.9101
10 20 9001767 NULL 10 NULL NULL NULL NULL 1 1 69 9.95535
腳本
DECLARE @nID nvarchar(50)
SET @nID = '9000001'
/****************Get all associated eventids with respect to the incoming numid**/
;WITH ss
AS (SELECT
a.groupid,
a.eventid
FROM subobjgroup a
WHERE numid = @nID)
/****************Get each member of the eventids selected above along with the tag data type, and tagval for each member.*/
,
ss2
AS (SELECT
c.*
FROM ss b
INNER JOIN subobjgroup c
ON b.eventid = c.eventid
)
/**************Check if each member in the groupid and their conditions to each eventid selected are met*/
SELECT
g.groupid,
g.eventid,
g.numid,
g.tagVal,
g.greaterThan,
g.greaterEqThan,
g.lessThan,
g.lessEqThan,
g.equalTo,
g.typeCol,
vCheck =
CASE
WHEN g.typecol = 0 THEN CASE
WHEN g.actval = g.tagval THEN 0
ELSE 1
END
WHEN g.typecol = 1 THEN CASE
WHEN g.actval > g.greaterthan THEN 0
ELSE 1
END
WHEN g.typecol = 2 THEN CASE
WHEN g.actval >= g.greatereqthan THEN 0
ELSE 1
END
WHEN g.typecol = 3 THEN CASE
WHEN g.actval < g.lessthan THEN 0
ELSE 1
END
WHEN g.typecol = 4 THEN CASE
WHEN g.actval <= g.lesseqthan THEN 0
ELSE 1
END
WHEN g.typecol = 5 THEN CASE
WHEN g.actval = g.equalto THEN 0
ELSE 1
END
ELSE 0
END,
g.activeid,
g.actVal
FROM ss2 g
ORDER BY g.eventid
結果...(記住,最後一列actVal不斷變化。你將看到需求,vCheck列有1以外的值。注意所有的vCheck值通過相同的typeCol值鏈接,而不是唯一地檢查每行的條件)
groupid eventid numid tagVal greaterThan greaterEqThan lessThan lessEqThan equalTo typeCol vCheck activeid actVal
9 19 9000001 NULL NULL NULL 105 NULL NULL 3 1 68 96.7658
9 19 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
9 19 9001767 NULL 10 NULL NULL NULL NULL 1 0 69 10.9553
10 20 9000001 NULL 105 NULL NULL NULL NULL 1 0 68 96.7658
10 20 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
10 20 9001767 NULL 10 NULL NULL NULL NULL 1 0 69 10.9553
28 18 9000001 NULL NULL NULL 105 NULL NULL 3 1 68 96.7658
28 18 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
28 18 9001767 NULL NULL NULL 10 NULL NULL 3 1 69 10.9553
期望的結果....(注意vCheck列和第1行,第4行和第7行。它們基於的條件發生變化,該行得到了實現,並設置爲0或1)
groupid eventid numid tagVal greaterThan greaterEqThan lessThan lessEqThan equalTo typeCol vCheck activeid actVal
9 19 9000001 NULL NULL NULL 105 NULL NULL 3 0 68 96.7658
9 19 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
9 19 9001767 NULL 10 NULL NULL NULL NULL 1 0 69 10.9553
10 20 9000001 NULL 105 NULL NULL NULL NULL 1 1 68 96.7658
10 20 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
10 20 9001767 NULL 10 NULL NULL NULL NULL 1 0 69 10.9553
28 18 9000001 NULL NULL NULL 105 NULL NULL 3 0 68 96.7658
28 18 9000002 0 NULL NULL NULL NULL NULL 0 1 70 1
28 18 9001767 NULL NULL NULL 10 NULL NULL 3 1 69 10.9553
可能是我誤解了,但case語句已經分別應用於每一行。此外,您的實際結果與您提供的查詢不一致。請詳細說明您要實現的目標。 – GurV
actVal列不斷變化。這是故意的。腳本運行。它查看actVal並根據該行的哪個typeCol來使用比較運算符進行評估。當多行具有相同的typeCol時,腳本將它們全部設置爲一個值,而不是每個值進行評估。請查看並比較結果和期望的結果。 – arios