这样的查询结果怎么实现? 急求...源表编号单位地址单号产品数量1205057顺达食品黄海南路98达利源蛋黄派241
这样的查询结果怎么实现? 急求...
源表
编号单位地址单号产品数量
1205057顺达食品黄海南路98达利源蛋黄派24
1205057顺达食品黄海南路98伊犁纯酸乳42
1205057顺达食品黄海南路98康师傅桶面30
1205057顺达食品黄海南路98娃哈哈八宝粥24
结果
编号 1205057 单位 顺达食品 地址 黄海南路 单号 98 产品 达利源蛋黄派 数量 24 产品 伊犁纯酸乳 数量 42 产品 康师傅桶面 数量 30 产品 娃哈哈八宝粥 数量 24
或
1205057 顺达食品 黄海南路 98 达利源蛋黄派 24 伊犁纯酸乳 42 康师傅桶面 30 娃哈哈八宝粥 24
[解决办法]
- SQL code
declare @sql varchar(max)set @sql='select distinct 编号,单位,地址,单号'select @sql=@sql+',max(case 产品 when '''+产品+''' then '''+产品+''' end) as ['+产品+'],sum(case 产品 when '''+产品+''' then 数量 end) as ['+产品+']'from cstableset @sql=@sql+' from cstable group by 编号,单位,地址,单号'print @sqlexec (@sql)----1205057 顺达食品 黄海南路 98 达利源蛋黄派 24 伊犁纯酸乳 42 康师傅桶面 30 娃哈哈八宝粥 24
[解决办法]
[解决办法]
- SQL code
--> 测试数据:[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 allselect 1205057,'顺达食品','黄海南路',98,'伊犁纯酸乳',42 union allselect 1205057,'顺达食品','黄海南路',98,'康师傅桶面',30 union allselect 1205057,'顺达食品','黄海南路',98,'娃哈哈八宝粥',24-- 查询处理SELECT *FROM (SELECT DISTINCT [编号],[单位],[地址],[单号] FROM [test])AOUTER 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*/
[解决办法]
- SQL code
select distinct 编号,单位,地址,单号,内容=stuff((select' '+产品+' '+cast(数量 as varchar(10)) from cstable b for xml path ('')),1,1,'')from cstable a 