一個表中合并行

jackbaby 2009-10-14 04:29:06
想了很多辦法,也想過用cursors ,寫了半天也沒寫出來,這里請教大家了,謝謝

一個表中數據,如下:

訂單號 發票號 金額1 金額2 其它
BK090427008 96613 4 3 A
BK090427008 96614 4 4 A
BK090427008 96615 4 5 A

要求合并如下:

BK090427008 96613,96614,96615 12 12 A

...全文
96 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
华夏小卒 2009-10-14
  • 打赏
  • 举报
回复

IF OBJECT_ID ('tb') IS NOT NULL DROP table tb
go
CREATE table tb(訂單號 varchar(20),發票號 varchar(10),金額1 int,金額2 int, 其它 varchar(5))
insert tb select
'BK090427008', '96613', 4, 3, 'A' union all select
'BK090427008', '96614', 4, 4, 'A' union all select
'BK090427008', '96615', 4, 5, 'A'

declare @s varchar(200)

select @s=isnull(@s+',','')+ 發票號 from tb

select @s=訂單號+','+@s+','+ltrim(sum(金額1))+','+ltrim(sum(金額2))+','+其它 from tb group by 訂單號,其它
select @s


----------------
BK090427008,96613,96614,96615,12,12,A

(1 行受影响)

qiqi860819 2009-10-14
  • 打赏
  • 举报
回复

CREATE TABLE #t
(
id VARCHAR(8),
fp VARCHAR(8),
price1 INT,
price2 INT,
qt VARCHAR(8)
)
GO

INSERT INTO #t
SELECT '01','1',1,1,'A' UNION ALL
SELECT '01','2',2,2,'A' UNION ALL
SELECT '01','3',3,3,'A' UNION ALL
SELECT '01','4',4,4,'A'
GO

SELECT ID,发票1=MAX(CASE WHEN FP='1' THEN FP ELSE 0 END),发票2=MAX(CASE WHEN FP='2' THEN FP ELSE 0 END),发票3=MAX(CASE WHEN FP='3' THEN FP ELSE 0 END),发票4=MAX(CASE WHEN FP='4' THEN FP ELSE 0 END),SUM(price1) AS 金额1,SUM(price2)AS 金额2,qt FROM #t GROUP BY ID,qt

jackbaby 2009-10-14
  • 打赏
  • 举报
回复
是不是Curtors最好別用哈?怎么我們同事沒事總用哈?最討厭Curtors了
--小F-- 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiequan2 的回复:]
http://topic.csdn.net/u/20091013/15/9f058df7-4d29-47bf-a338-b63fcab2abc0.html?51371
[/Quote]

谢谢xiequan2兄还看看我的帖子 哈哈
--小F-- 2009-10-14
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-10-14 16:31:15
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([訂單號] varchar(11),[發票號] int,[金額1] int,[金額2] int,[其它] varchar(1))
insert [tb]
select 'BK090427008',96613,4,3,'A' union all
select 'BK090427008',96614,4,4,'A' union all
select 'BK090427008',96615,4,5,'A'
--------------开始查询--------------------------

select
[訂單號],
[發票號]=stuff((select ','+ltrim([發票號]) from tb t where [訂單號]=tb.[訂單號] for xml path('')), 1, 1, ''),
sum([金額1]) as [金額1],
sum([金額2]) as [金額2],[其它]
from
[tb]
group by
[訂單號],[其它]
----------------结果----------------------------
/* 訂單號 發票號 金額1 金額2 其它
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----
BK090427008 96613,96614,96615 12 12 A

(1 行受影响)
*/
7761098 2009-10-14
  • 打赏
  • 举报
回复
行列转换吧,怎么这么多
jackbaby 2009-10-14
  • 打赏
  • 举报
回复
2000的
SQL77 2009-10-14
  • 打赏
  • 举报
回复
哎2005用XML,2000用函数

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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