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

SQL实现同一销售区域上,列出所有销售过的客户

2012-12-14 
求一个SQL实现同一销售区域下,列出所有销售过的客户表大致结构如下销货单号|客户单位 | 销售区域 | 销售省

求一个SQL实现同一销售区域下,列出所有销售过的客户
表大致结构如下
销货单号|客户单位 | 销售区域 | 销售省份| 产品唯一码|数量
0001     A         华中        湖北    sn1        1
0001     A         华中        湖北    sn2        1
0001     A         华中        湖北    sn3        1
0002     B         华中        湖南    sn4        1 
0002     B         华中        湖南    sn5        1
0003     C         华南        福建    sn6        1
0004     D         华南        广东    sn7        1 
希望实现的效果
销售区域|销售总量|客户单位
华中|5|A,B
华南|2|C,D

小弟琢磨了两天,没搞定,故只好来此请教大家

[最优解释]
SELECT 销售区域, SUM(数量) AS 销售总量, dbo.quyu_str(cast(销售区域 as Nvarchar(30))) AS 客户单位
 FROM tb
 group by 销售区域
看起来像是字段 销售区域 的数据问题。
[其他解释]
select 销售区域,SUM(数量) as 销售总量,STUFF((select ','+客户单位 from TB where 销售区域=a.销售区域 group by 客户单位 FOR xml path('')),1,1,'') as 客户单位
from TB as a
group by 销售区域
[其他解释]

引用:
select 销售区域,SUM(数量) as 销售总量,STUFF((select ','+客户单位 from TB where 销售区域=a.销售区域 group by 客户单位 FOR xml path('')),1,1,'') as 客户单位
from TB as a
group by 销售区域


这个是行的通过的!我试过。

[其他解释]
select 销售区域,销售总量=sum(数量),
       客户单位=stuff((select ','+客户单位 from tb where 销售区域=a.销售区域 for xml path('')),1,1,'')
from tb a group by 销售区域
[其他解释]
引用:
select 销售区域,销售总量=sum(数量),
       客户单位=stuff((select ','+客户单位 from tb where 销售区域=a.销售区域 for xml path('')),1,1,'')
from tb a group by 销售区域

用的sql2000 不支持for xml
我转成函数了,
CREATE FUNCTION dbo.quyu_str(@id nvarchar) RETURNS varchar(8000) 
AS BEGIN DECLARE @r varchar(8000)
SET @r = ''
          SELECT @r = @r + ',' + 客户单位


        FROM TB
        WHERE 销售区域 = @id RETURN STUFF(@r, 1, 1, '') END

SELECT 销售区域, SUM(数量) AS 销售总量, dbo.quyu_str(销售区域) AS 客户单位
FROM tb
group by 销售区域

但结果总是不对,第三列全是null,只有那些区域填错了,填的是0,1,''的能正常显示出客户,其他区域是汉字的都是null
[其他解释]
[img=http://my.csdn.net/my/album/detail/1384746][/img]

引用:
select 销售区域,SUM(数量) as 销售总量,STUFF((select ','+客户单位 from TB where 销售区域=a.销售区域 group by 客户单位 FOR xml path('')),1,1,'') as 客户单位
from TB as a
group by 销售区域


[其他解释]
CREATE FUNCTION dbo.quyu_str(@id nvarchar(20)) 
RETURNS varchar(8000) 
 AS 
 BEGIN 
 DECLARE @r varchar(8000)
 SET @r = ''
 SELECT @r = @r + ',' + 客户单位
 FROM TB WHERE 销售区域 = @id 
 RETURN STUFF(@r, 1, 1, '') 
 END
[其他解释]
引用:
CREATE FUNCTION dbo.quyu_str(@id nvarchar(20)) 
RETURNS varchar(8000) 
 AS 
 BEGIN 
 DECLARE @r varchar(8000)
 SET @r = ''
 SELECT @r = @r + ',' + 客户单位
 FROM TB WHERE 销售区域 = @id 
 RETURN STUFF……

结贴,dbo.quyu_str(@id nvarchar(20)) 是没有定义@id的长度导致的
[其他解释]
null

热点排行