日期:2014-05-18 浏览次数:20394 次
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