Don't miss your chance to take the Fabric Data Engineer (DP-700) exam on us!
Learn moreWe've captured the moments from FabCon & SQLCon that everyone is talking about, and we are bringing them to the community, live and on-demand. Starts on April 14th. Register now
Is it possible to increment an local variable in SQL Server inside a CASE WHEN statement.
I am attempting to identify a Group ID in my table when a error. I am currently using CASE WHEN & Declare as in the following statement.
My code:
Declare @GroupID INT = 1; SELECT a.CPUT AS Tim ,a.USNA AS wayq ,a.WE AS Pl ,a.MA AS Mau ,b.MAK AS Material_Desc ,a.BW AS Movement_type ,c.BTE AS Movement_Type_Text ,lag(a.BW) over (order by a.MB ,a.ZE) as Prev_Movement_type ,@GroupID = @GroupID + CAST( CASE WHEN (a.BW = '13' AND (lag(a.BW) over (order by a.MB ,a.ZE) = '14')) THEN (@GroupID + 1) WHEN (a.BW = '13' AND (lag(a.BW) over (order by a.MB ,a.ZE) = '15')) THEN (@GroupID + 1) WHEN (a.BW = '16' AND (lag(a.BW) over (order by a.MB ,a.ZE) = '14')) THEN (@GroupID + 1) WHEN (a.BW = '16' AND (lag(a.BW) over (order by a.MB ,a.ZE) = '15')) THEN (@GroupID + 1) ELSE @GroupID END AS BIT) as GroupID FROM Database_Table1 a LEFT JOIN Database_Table2 b ON (a.MA = b.MA) LEFT JOIN Database_Table3 c ON (a.BW = c.BW) WHERE a.BW IN ('13', '14', '15', '16') ORDER BY a.MB ,a.ZE
I want the following result:
Best regard.
Solved! Go to Solution.
Hi, @joemon
Sql is not something that can handle procedural operations. Try using window functions to create a cumulative sum or some other running total.
For example:
WITH RankedData AS (
SELECT
a.CPUT AS Tim,
a.USNA AS wayq,
a.WE AS Pl,
a.MA AS Mau,
b.MAK AS Material_Desc,
a.BW AS Movement_type,
c.BTE AS Movement_Type_Text,
lag(a.BW) OVER (ORDER BY a.MB, a.ZE) as Prev_Movement_type,
ROW_NUMBER() OVER (ORDER BY a.MB, a.ZE) as rn
FROM
Database_Table1 a
LEFT JOIN
Database_Table2 b ON a.MA = b.MA
LEFT JOIN
Database_Table3 c ON a.BW = c.BW
WHERE
a.BW IN ('13', '14', '15', '16')
),
Groupings AS (
SELECT
*,
SUM(CASE
WHEN (Movement_type = '13' AND Prev_Movement_type = '14') THEN 1
WHEN (Movement_type = '13' AND Prev_Movement_type = '15') THEN 1
WHEN (Movement_type = '16' AND Prev_Movement_type = '14') THEN 1
WHEN (Movement_type = '16' AND Prev_Movement_type = '15') THEN 1
ELSE 0
END) OVER (ORDER BY rn ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as GroupID
FROM
RankedData
)
SELECT
Tim,
wayq,
Pl,
Mau,
Material_Desc,
Movement_type,
Movement_Type_Text,
Prev_Movement_type,
GroupID
FROM
Groupings
ORDER BY
rn;
Proud to be a Super User!
Hi, @joemon
Sql is not something that can handle procedural operations. Try using window functions to create a cumulative sum or some other running total.
For example:
WITH RankedData AS (
SELECT
a.CPUT AS Tim,
a.USNA AS wayq,
a.WE AS Pl,
a.MA AS Mau,
b.MAK AS Material_Desc,
a.BW AS Movement_type,
c.BTE AS Movement_Type_Text,
lag(a.BW) OVER (ORDER BY a.MB, a.ZE) as Prev_Movement_type,
ROW_NUMBER() OVER (ORDER BY a.MB, a.ZE) as rn
FROM
Database_Table1 a
LEFT JOIN
Database_Table2 b ON a.MA = b.MA
LEFT JOIN
Database_Table3 c ON a.BW = c.BW
WHERE
a.BW IN ('13', '14', '15', '16')
),
Groupings AS (
SELECT
*,
SUM(CASE
WHEN (Movement_type = '13' AND Prev_Movement_type = '14') THEN 1
WHEN (Movement_type = '13' AND Prev_Movement_type = '15') THEN 1
WHEN (Movement_type = '16' AND Prev_Movement_type = '14') THEN 1
WHEN (Movement_type = '16' AND Prev_Movement_type = '15') THEN 1
ELSE 0
END) OVER (ORDER BY rn ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as GroupID
FROM
RankedData
)
SELECT
Tim,
wayq,
Pl,
Mau,
Material_Desc,
Movement_type,
Movement_Type_Text,
Prev_Movement_type,
GroupID
FROM
Groupings
ORDER BY
rn;
Proud to be a Super User!
Very thankful 🙂
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
| User | Count |
|---|---|
| 5 | |
| 4 | |
| 3 | |
| 3 | |
| 2 |
| User | Count |
|---|---|
| 8 | |
| 8 | |
| 6 | |
| 6 | |
| 5 |