У меня проблемы с простым автоинкрементом с использованием общих табличных выражений.(Я не хочу ROW_NUMBER (), потому что я буду использовать условия для моего приращения), так что вот упрощенная версия моей проблемы, которая все еще не работает.Я получаю эту ошибку: «Неверное имя столбца« n »» при попытке выполнить следующее:
WITH NumberSongPair ( n,s ) AS (
SELECT 0 as n,SongKey as s from Songs where SongKey = 1
UNION ALL
SELECT 1 + n as n,SongKey as s
from Songs
WHERE n < 500 )
SELECT n,s FROM NumberSongPair
OPTION ( MAXRECURSION 500 )
Почему он не может распознать 'n' как вновь созданный увеличенный столбец?Я даже был бы рад просто избавиться от первого выбора все вместе, пока я могу продолжать увеличивать число при выборе столбцов из таблицы.
Если вам интересны мои общие цели, то это ранжирование песен.... с такими условиями:
WITH Nbrs ( base, n,ctr ) AS (
SELECT 0,0,0 UNION ALL
SELECT 1 + base,'n' = case
when (base + 1)%2=0 then ctr
when ctr <=20 then ctr
else null end,
'ctr' = case
when (base + 1)%2=0 then ctr + 1
else ctr end
FROM Nbrs WHERE base < 500 )
SELECT n FROM Nbrs
OPTION ( MAXRECURSION 500 )
РЕДАКТИРОВАТЬ ...
Извините, мое объяснение было не очень хорошим.Я просто хотел добавить еще один столбец с автоинкрементом psuedo, который иногда мог бы обнуляться вместо приращения.В основном я пытаюсь что-то вроде этого:
declare @songs table (songkey int, dropable bit, points int)
insert @songs values (1, 1, 1); insert @songs values (2, 1, 20);
insert @songs values (3, 1, 3); insert @songs values (3, 0, 11);
insert @songs values (4, 0, 4); insert @songs values (6, 0, 2);
select row_number() over(order by points desc) as RankingPosition, songkey, dropable, points
from @Songs
Но добавив следующее условие: «отбрасываемые» песни теряют свой рейтинг (являются нулевыми), если они не попадают в топ-3. Это означает, что SongKey # 2не упадет, но № 4 и № 6 будут.Таким образом, результат будет выглядеть следующим образом:
- PositionRank 1 - Songkey 2
- PositionRank 2 - Songkey 3
- PositionRank 3 - Songkey 4
- PositionRank4 - Songkey 6
- PositionRank null - Songkey 4
- PositionRank null - Songkey 1
Ранг определяется точками, но есть условия.