我试图在没有光标的情况下在两行之间完成分组,有人可以帮我注册这个
Col1(int) Col2(int)
--------- ---------
1 20
2 30
3 40
我想要这样的输出
Col1 Col2
---- ----
1-2 50
2-3 70
答案 0 :(得分:1)
你确定你没有遗漏任何行...
Select cast(a.col1 as varchar(10)) + '-' + cast(b.col1 as varchar(10)) as col1,
a.col2 + b.Col2 as Col2
From mytable a
Inner Join mytable b on b.col1 = (a.col1 + 1)
如果您可能缺少行,则可能需要更复杂。
答案 1 :(得分:1)
如果你不想重复行(1-2,2-3)并且你可以预期会有一些缺失的id(如果你有一个标识字段那么正常),这是一个棘手的问题。 / p>
试试这个:
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
答案 2 :(得分:0)
假设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
答案 3 :(得分:0)
你也可以测试以下查询...
我的机器中有oracle,这就是我可以运行并只说oracle查询的原因..
请检查这是否也适用于sql server并告诉我有关...
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()函数中用于获取最后一行的值..如果它是第一行,那么这个函数将给出空值..这样通过在空值上应用加法,你将只得到null
通过这个概念,我们将获得所需的输出......