这样的查询结果如何实现? 急求.
这样的查询结果怎么实现? 急求...
源表
编号 单位 地址 单号 产品 数量
1205057 顺达食品 黄海南路 98 达利源蛋黄派 24
1205057 顺达食品 黄海南路 98 伊犁纯酸乳 42
1205057 顺达食品 黄海南路 98 康师傅桶面 30
1205057 顺达食品 黄海南路 98 娃哈哈八宝粥 24
结果
编号 1205057 单位 顺达食品 地址 黄海南路 单号 98 产品 达利源蛋黄派 数量 24 产品 伊犁纯酸乳 数量 42 产品 康师傅桶面 数量 30 产品 娃哈哈八宝粥 数量 24
或
1205057 顺达食品 黄海南路 98 达利源蛋黄派 24 伊犁纯酸乳 42 康师傅桶面 30 娃哈哈八宝粥 24
------解决方案--------------------
源表
编号 单位 地址 单号 产品 数量
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 cstable set @sql=@sql+' from cstable group by 编号,单位,地址,单号' print @sql exec (@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 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 */
------解决方案--------------------
- SQL code
select distinct 编号,单位,地址,单号,内容=stuff((select' '+产品+' '+cast(数量 as varchar(10)) from cstable b for xml path ('')),1,1,'') from cstable a