超难的Sql查询(纵向转横向+分组统计)

来源:百度知道 编辑:UC知道 时间:2024/09/24 23:25:27
原表:
销售单号 商品编号
001 1
001 2
001 3
001 4
002 1
003 3
003 4

简单说明:每次销售出去的商品可能相同,可能不同,现在要按商品编号分组统计一下各商品被销售的单号

查询结果如下:
商品编号 销售单号
1 001,002
2 001
3 001,003
4 001,003

使用自定议函数实现:

先建立一个取某列值的函数(getcol):输入商品编号,返回该编号对应的销售单号。

再执行这个语句即可:
select 商品编号,销售单号=dbo.getcol(商品编号) from
(select distinct 商品编号 from 表名) a

表结构:
CREATE TABLE 表名(商品编号 int,销售单号 varchar(20))

函数脚本(如果表结构一致,直接复制到查询分析器即可执行):
alter FUNCTION getcol
(@spbh int)
RETURNS varchar(8000)
AS
BEGIN
declare @f1 varchar(100),@result varchar(1000),@deli char(1)
set @deli=','
set @result=''

DECLARE ddcursor CURSOR for select 销售单号 from 表名 where 商品编号=@spbh
open ddcursor
fetch next from ddcursor into @f1
while @@fetch_status!=-1
begin
set @result=@result+@deli+isnull(@f1,'')
fetch next from ddcursor into @f1
end
close ddcursor
deallocate ddcursor
set @result=substring(@result,2,1000)

return (@result)
end

GO
注:想了好久,没有找到更加通用的函数和方法,只能用这个方法,当然,也可以用存储过程实现,但那样