Группировка последовательных строк в таблице без курсора - PullRequest
0 голосов
/ 29 июня 2011

Я пытаюсь выполнить группировку между 2 строками без курсора, может ли кто-нибудь помочь мне с этим

Col1(int)  Col2(int)
---------  ---------
1          20
2          30
3          40

Я хочу выводить как

Col1  Col2
----  ----
1-2   50
2-3   70

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Это сложно, если вы не хотите повторять строки (1-2, 2-3), и вы можете ожидать, что там будут некоторые пропущенные идентификаторы (как обычно, если у вас есть поле идентификатора).

Попробуйте это:

CREATE TABLE #temp (id INT, value INT)

INSERT INTO #temp 
SELECT 1,2
UNION ALL
SELECT 2,8
UNION ALL
SELECT 3,8
UNION ALL
SELECT 5,19

SELECT id, value, ROW_NUMBER() OVER (ORDER BY id) AS rownumber 
INTO #temp2
FROM #temp

SELECT * FROM #temp2

SELECT CAST(b.id AS VARCHAR(10)) + '-' + CAST(a.id AS VARCHAR(10)) AS col1,
    a.value + b.value as Col2 
FROM #temp2 a
JOIN #temp2 b 
    ON a.rownumber = b.rownumber+1
WHERE ABS(a.rownumber)%2 = 0 
1 голос
/ 29 июня 2011

Вы уверены, что не пропускаете ни одной строки?

0 голосов
/ 29 июня 2011

Вы также можете проверить следующий запрос ...

У меня есть оракул на моей машине, поэтому я могу запускать и произносить только запросы оракула ..

проверьте, будет ли это работать на SQLсервер или нет, и скажите мне о ...

select * from 
     (Select lag (col1) over (order by col1)|| '-' || col1  as col1
      col2 + lag (col2) over (order by col1) as Col2 
     From mytable
     )
where col2 is not null;

в функции oracle lag (), используемой для получения значений последней строки ... и если это первая строка, то эта функция выдаст нулевые значения .. такчто, применяя сложение к нулевым значениям, вы получите только ноль

, благодаря этой концепции мы получим желаемый результат ...

0 голосов
/ 29 июня 2011

Предполагая, что col1 является целым числом

SELECT CAST(a.col1 as VARCHAR(10))+ '-' + CAST(b.col1 as VARCHAR(10)), COALESCE(a.col2,0)+COALESCE(b.col2,0)
FROM table a
JOIN table b a.col1 = b.col1 + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...