sql server 2005 快速合并表中的行

songguozhi 2011-01-25 04:51:57
我的环境是SQL Server 2005, 现在在一个表中有多个INT型的列, 现在想把其中的一些行快速的合并成一行,
不想采用简单的列名相加的办法,以此来解决多列同时快速相加
songguozhi.esbu 16:51:37
DECLARE @tab TABLE(id INT, col1 INT, col2 INT, col3 INT)
INSERT INTO @tab(id, col1, col2, col3)
SELECT 0, 1, 2, 3 UNION ALL
SELECT 1, 2, 3, 4 UNION ALL
SELECT 2, 1, 1, 1 UNION ALL
SELECT 3, 3, 3, 3

SELECT * FROM @tab
/*
id col1 col2 col3
----------- ----------- ----------- -----------
0 1 2 3
1 2 3 4
2 1 1 1
3 3 3 3
*/

--现在合并其中id为的行
--也就是需要改进的办法,这种办法在多列时太不方便
UPDATE tab1 SET
col1 = tab1.col1 + tab2.col1,
col2 = tab1.col2 + tab2.col2,
col3 = tab1.col3 + tab2.col3
FROM @tab tab1
INNER JOIN @tab tab2
ON tab2.id = 0
WHERE tab1.id = 1
DELETE FROM @tab WHERE id = 0

SELECT * FROM @tab
/*
id col1 col2 col3
----------- ----------- ----------- -----------
1 3 5 7
2 1 1 1
3 3 3 3
*/
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwacky 2011-01-28
  • 打赏
  • 举报
回复

----------- ----------- ----------- -----------
1 3 5 7
2 1 1 1
3 3 3 3

(3 行受影响)

fwacky 2011-01-28
  • 打赏
  • 举报
回复

DECLARE @tab TABLE(id INT, col1 INT, col2 INT, col3 INT)
INSERT INTO @tab(id, col1, col2, col3)
SELECT 0, 1, 2, 3 UNION ALL
SELECT 1, 2, 3, 4 UNION ALL
SELECT 2, 1, 1, 1 UNION ALL
SELECT 3, 3, 3, 3

--SELECT * FROM @tab

select sum(id),sum(col1),sum(col2),sum(col3) from @tab where id in (0,1)
union all
select * from @tab where id not in (0,1)
=================
0,1 可以是条件

songguozhi 2011-01-28
  • 打赏
  • 举报
回复
要是列多了,咋个处理,全部还sum一次,我想的是找更快速的办法
-晴天 2011-01-25
  • 打赏
  • 举报
回复
select id,col1,col2,col3 from tb where not 合并条件
union
select max(id),sum(col1),sum(col2),sum(col3) from tb where 合并条件
黄_瓜 2011-01-25
  • 打赏
  • 举报
回复
DECLARE @tab TABLE(id INT, col1 INT, col2 INT, col3 INT)
INSERT INTO @tab(id, col1, col2, col3)
SELECT 0, 1, 2, 3 UNION ALL
SELECT 1, 2, 3, 4 UNION ALL
SELECT 2, 1, 1, 1 UNION ALL
SELECT 3, 3, 3, 3

select sum(id),sum(col1),sum(col2),sum(col3) from @tab where id<2
union all
select * from @tab where id>=2
/*
----------- ----------- ----------- -----------
1 3 5 7
2 1 1 1
3 3 3 3

(3 行受影响)

*/
黄_瓜 2011-01-25
  • 打赏
  • 举报
回复
没看明白怎么合并的
叶子 2011-01-25
  • 打赏
  • 举报
回复
用sum可以吗?
列太多,可以考虑循环列表,动态拼串。

22,199

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧