文字类型字段group by

FrankLiang 2014-03-27 04:28:30
源表格:
------------------------
部位 物料 用量
A XXX 100
B XXX 200
C XXX 300
------------------------

如何用SQL合计转为以下:
------------------------
部位 物料 用量
A+B+C XXX 600
------------------------

请高手帮忙,谢谢!
...全文
160 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
MootShao 2014-03-27
  • 打赏
  • 举报
回复
引用 10 楼 FrankLiang 的回复:
我的天哪, 大神奇了! 大伙好好人! 谢谢各位! 测试OK! 不过,我不明白这段: data=STUFF((SELECT ','+部位 FROM test t WHERE 物料=t1.物料 FOR XML PATH('')), 1, 1, '')
FOR XML PATH ('') 会把“部位”字段拼成一个XML的字符串 ,然后使用STUFF函数进行截取
直面人生 2014-03-27
  • 打赏
  • 举报
回复
引用 4 楼 u010192842 的回复:
真快.....我这敲半天了,你说我是发呢还是发呢还是发呢?
敲得慢的还能咋办呢。。。
AcHerat 2014-03-27
  • 打赏
  • 举报
回复
楼主了解下xml的用法,在05及之后的版本可以这么用,百度 sql for xml
FrankLiang 2014-03-27
  • 打赏
  • 举报
回复
我的天哪, 大神奇了! 大伙好好人! 谢谢各位! 测试OK! 不过,我不明白这段: data=STUFF((SELECT ','+部位 FROM test t WHERE 物料=t1.物料 FOR XML PATH('')), 1, 1, '')
Yole 2014-03-27
  • 打赏
  • 举报
回复
引用 8 楼 chwnrthd 的回复:
想吐 回复0的时候开始写 写完一发 刷新后发现7楼
您可以学我,先刷再发~~
  • 打赏
  • 举报
回复
想吐 回复0的时候开始写 写完一发 刷新后发现7楼
  • 打赏
  • 举报
回复

create table test(部位 nvarchar(10),物料 nvarchar(10),用量 int)
insert test 
select 'A','XXX',100 union all	
select 'B','XXX',200 union all
select 'C','XXX',300
SELECT data=STUFF((SELECT ','+部位 FROM test t 
			WHERE 物料=t1.物料 FOR XML PATH('')), 1, 1, ''),
		物料, 
		用量=SUM(用量)
FROM test t1
GROUP BY 物料
/*
A,B,C	XXX	600
*/
lzw_0736 2014-03-27
  • 打赏
  • 举报
回复

WITH a1 (zd1,zd2,zd3) AS
(
SELECT 'A','XXX',100 UNION ALL
SELECT 'B','XXX',200 UNION ALL
SELECT 'C','XXX',300
)
SELECT STUFF((SELECT '+'+zd1 FROM a1 WHERE zd2=a.zd2 FOR XML PATH('')),1,1,'') zd1,zd2,SUM(zd3) d3
FROM a1 a
GROUP BY zd2
AcHerat 2014-03-27
  • 打赏
  • 举报
回复
--sql2005 select 物料, stuff((select 部位+'+' from tb b where a.物料 = b.物料 for xml path('')),1,1,'') as 部位, sum(用量) 用量 from tb a group by 物料 擦!怎么一下冒出来俩。。。
Yole 2014-03-27
  • 打赏
  • 举报
回复
真快.....我这敲半天了,你说我是发呢还是发呢还是发呢?
AcHerat 2014-03-27
  • 打赏
  • 举报
回复

--sql2005
select 物料,
       (select 部位+'+' from tb b where a.物料 = b.物料 for xml path('')) as 部位,
       sum(用量) 用量
from tb a
group by 物料
發糞塗牆 2014-03-27
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-03-27 16:29:34
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
--	Apr  2 2010 15:48:46 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[HUANG]
if object_id('[HUANG]') is not null drop table [HUANG]
go 
create table [HUANG]([部位] nvarchar(2),[物料] nvarchar(6),[用量] int)
insert [HUANG]
select 'A','XXX',100 union all
select 'B','XXX',200 union all
select 'C','XXX',300
--------------生成数据--------------------------

select stuff((select '+'+[部位] from [HUANG] b 
       where b.[物料]=a.[物料]
       for xml path('')),1,1,'') '部位',a.[物料],SUM(a.[用量])[用量]
from [HUANG] a
group by  a.[物料]
----------------结果----------------------------
/* 
部位                                                                                                                                                                                                                                                               物料     用量
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ -----------
A+B+C                                                                                                                                                                                                                                                            XXX    600

*/
--小F-- 2014-03-27
  • 打赏
  • 举报
回复
---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2014-03-27 16:29:12 -- Verstion: -- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation -- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1) -- ---------------------------------------------------------------- --> 测试数据:[tb] if object_id('[tb]') is not null drop table [tb] go create table [tb]([部位] varchar(1),[物料] varchar(3),[用量] int) insert [tb] select 'A','XXX',100 union all select 'B','XXX',200 union all select 'C','XXX',300 --------------开始查询-------------------------- select 物料,SUM(用量) AS 用量, [部位]=stuff((select '+'+[部位] from tb where 物料=t.物料 for xml path('')), 1, 1, '') from tb t group by 物料 ----------------结果---------------------------- /* 物料 用量 部位 ---- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- XXX 600 A+B+C (1 行受影响) */

22,209

社区成员

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

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