Выбрать текущую строку и все предыдущие строки из таблицы - PullRequest
0 голосов
/ 08 мая 2020

Давайте возьмем пример: у меня есть таблица с именем mytab со следующими полями:

Name   Age
-----------
Jack    19
Josh    26
David   23

Что мне нужно сделать, так это выбрать все строки этой таблицы и для каждой строки выбрать все его предыдущие строки, поэтому вывод должен быть:

Name   Age
-----------
Jack    19
Jack    19
Josh    26
Jack    19
Josh    26
David   23

Итак, результат запроса содержит первую строку, затем первую и вторую строки, затем первую, вторую и третью строки.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

В таблице нет первой строки, потому что они представляют неупорядоченные наборы. Вам нужен столбец, определяющий порядок.

Ваш действительно странный - он может создавать много строк (n * (n + 1) / 2 где n - размер таблицы).

Но вы можете перечислить строки и объединиться:

with tn as (
      select t.*, row_number() over (order by <ordering column>) as seqnum
      from t
     t
select tprev.name, tprev.age
from tn join
     tn tprev
     on tprev.seqnum <= t.seqnum
order by tn.seqnum, tprev.seqnum;
1 голос
/ 08 мая 2020

Интересный способ сделать это, который может работать лучше, чем самостоятельное присоединение к пронумерованному столбцу, находится ниже db <> fiddle

WITH T AS
(
SELECT *,
       ROW_NUMBER() OVER (ORDER BY <ordering column> DESC) AS Weight
FROM #YourTable yt1
)
SELECT Id, Name
FROM T
CROSS APPLY (SELECT ROW_NUMBER() OVER (ORDER BY @@SPID) - Weight AS RN FROM STRING_SPLIT(SPACE(Weight - 1), ' ')) CA
ORDER BY RN,  <ordering column>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...