日期:2014-05-18 浏览次数:20519 次
declare @sql varchar(max) set @sql='select distinct 编号,单位,地址,单号' select @sql=@sql+',max(case 产品 when '''+产品+''' then '''+产品+''' end) as ['+产品+'],sum(case 产品 when '''+产品+''' then 数量 end) as ['+产品+']' from cstable set @sql=@sql+' from cstable group by 编号,单位,地址,单号' print @sql exec (@sql) ---- 1205057 顺达食品 黄海南路 98 达利源蛋黄派 24 伊犁纯酸乳 42 康师傅桶面 30 娃哈哈八宝粥 24
------解决方案--------------------
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
create table [test](
[编号] int,
[单位] varchar(8),
[地址] varchar(8),
[单号] int,
[产品] varchar(12),
[数量] int
)
insert [test]
select 1205057,'顺达食品','黄海南路',98,'达利源蛋黄派',24 union all
select 1205057,'顺达食品','黄海南路',98,'伊犁纯酸乳',42 union all
select 1205057,'顺达食品','黄海南路',98,'康师傅桶面',30 union all
select 1205057,'顺达食品','黄海南路',98,'娃哈哈八宝粥',24
-- 查询处理
SELECT *FROM (SELECT DISTINCT [编号],[单位],[地址],[单号] FROM [test])A
OUTER APPLY(
SELECT 产品和数量= STUFF(REPLACE(REPLACE(
( SELECT [产品]+' '+LTRIM([数量]) as VALUE FROM [test] N
WHERE [编号]=A.编号 AND [单位]=A.单位 AND [地址]=A.地址 AND [单号]=A.单号
FOR XML AUTO
), '<N value="', ' '), '"/>', ''), 1, 1, '')
)N
/*
编号 单位 地址 单号 产品和数量
1205057 顺达食品 黄海南路 98 达利源蛋黄派 24 伊犁纯酸乳 42 康师傅桶面 30 娃哈哈八宝粥 24
*/
------解决方案--------------------
select distinct 编号,单位,地址,单号,内容=stuff((select' '+产品+' '+cast(数量 as varchar(10)) from cstable b for xml path ('')),1,1,'')
from cstable a