Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
Sign up nowGet Fabric certified for FREE! Don't miss your chance! Learn more
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 love stickers, then you will definitely want to check out our Community Sticker Challenge!
Check out the January 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 13 | |
| 11 | |
| 9 | |
| 8 | |
| 6 |