I am trying to create a column when selecting data from a table to auto_increment the row count and the best solution I have found is to use ROW_NUMBER() OVER ( order by Date DESC) AS row_
because it is consistent with the order clause and has proven to work in my situation.
However I can't use the new column row_
when creating stats in a case when
statement.
For example, I have the following statement:
SELECT ROW_NUMBER() OVER ( order by Date Desc) AS row_
,CASE WHEN row_ = 1 then 8 else 0 end as stat1
,CASE WHEN row_ = 2 then 2 else 0 end as stat2
FROM tblr R
JOIN tblrn RR ON R.RUniqueID = RR.WRID
WHERE WHID = @VHID AND RDate < @RD
ORDER BY RDate DESC;
However I get an error saying: Unknown column 'row_' in field list
.
Im really looking for something where I can have a table (row_
being calculated by the ROW_NUMBER()...
section):
row_ | col1 | col2 |
---|---|---|
1 | blah | blah |
2 | blah | blah |
3 | blah | blah |
and be able to use row_ in a case when situation so create another column to look like:
row_ | col1 | col2 | stat1 | stat2 |
---|---|---|---|---|
1 | blah | blah | 8 | 0 |
2 | blah | blah | 0 | 2 |
3 | blah | blah | 0 | 0 |
CodePudding user response:
You can directly use the ROW_NUMBER()
function within you CASE
clause Like below:
SELECT ROW_NUMBER() OVER ( order by Date Desc) AS row_,
CASE WHEN ROW_NUMBER() OVER ( order by Date Desc) = 1 THEN 8 ELSE 0 END AS stat1,
CASE WHEN ROW_NUMBER() OVER ( order by Date Desc) = 2 THEN 2 ELSE 0 END AS stat2
FROM tblr R
JOIN tblrn RR ON R.RUniqueID = RR.WRID
WHERE WHID = @VHID AND RDate < @RD
ORDER BY RDate DESC;