首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-05-20 
这样的查询结果怎么实现? 急求...源表编号单位地址单号产品数量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
[解决办法]
探讨
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 

热点排行