SQL Server 2005 - Счетчик в запросе выбора - PullRequest
2 голосов
/ 28 февраля 2012

Я хотел бы иметь счетчик строк в запросе выбора моей хранимой процедуры, но счетчик не будет увеличиваться для каждой строки. Увеличение будет зависеть от значения одного из полей. Нечто эквивалентное этому неверному коду:

DECLARE @RowIndex as int
SET @RowIndex = 0
SELECT
   f1, f2, f3,
   CASE
      WHEN f1 > 3 THEN @RowIndex += 1
      ELSE @RowIndex
   END AS MyIndex
FROM
   MyTable

Как мне это сделать в SQL Server 2005?

Ответы [ 2 ]

1 голос
/ 28 февраля 2012
SELECT f1,f2,f3, DENSE_RANK() OVER (ORDER BY tempf1)-1 AS myIndex
FROM
(
  SELECT f1, f2, f3, CASE WHEN f1>3 THEN f1 ELSE 0 END AS tempf1
  FROM
  MyTable
) AS A

Пожалуйста, используйте Dense_Rank () с порядком по f1, как указано выше.Попробуйте это.

0 голосов
/ 28 февраля 2012

Чтобы сделать это в одном запросе, вам нужно присоединить таблицу обратно к себе, чтобы получить число или предыдущие строки, которые соответствуют вашим критериям. Кроме того, вам обязательно нужен столбец, который упорядочивает таблицу В этом случае назовем этот столбец f2.

SELECT a.f1, a.f2, a.f3
    , SUM(CASE WHEN b.f1 > 3 THEN 1 ELSE 0 END) AS MyIndex
FROM MyTable a
JOIN MyTable b
    ON a.f2 >= b.f2
GROUP BY a.f1, a.f2, a.f3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...