当前位置: 代码迷 >> Sql Server >> 这样的查询结果如何实现? 急求.
  详细解决方案

这样的查询结果如何实现? 急求.

热度:82   发布时间:2016-04-27 12:47:48.0
这样的查询结果怎么实现? 急求...
源表

编号 单位 地址 单号 产品 数量
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 @[email protected]+',max(case 产品 when '''+产品+''' then '''+产品+''' end) as ['+产品+'],sum(case 产品 when '''+产品+''' then 数量 end) as ['+产品+']'from cstableset @[email protected]+' from cstable group by 编号,单位,地址,单号'print @sqlexec (@sql)----1205057    顺达食品    黄海南路    98    达利源蛋黄派    24    伊犁纯酸乳    42    康师傅桶面    30    娃哈哈八宝粥    24
------解决方案--------------------
探讨
wangjunjie321 的这个可以,能用纯语句吗?不用动态查询

------解决方案--------------------
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
  相关解决方案