本帖最后由 Domino0627 于 2011-04-20 14:55:21 编辑

解决方案 »

  1.   

    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);
    --distinct 
    select isnull(颜色+',','') from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
      

  2.   

    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);
    --distinct 
    select @sql=isnull(颜色+',','') from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
      

  3.   

    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);set @sql=''
    --distinct 
    select @sql=@sql+ 颜色+',' from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号 
    and 颜色 is not null---这里加个条件
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
      

  4.   


    --级别也一样
    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);set @sql=''
    --distinct 
    select @sql=@sql+ 颜色+',' from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号 
    and 颜色 is not null---这里加个条件
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
      

  5.   

    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40)select @sql=isnull(isnull(@sql+',','') + 颜色,@sql) from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号
    ) aareturn @sql
    end
    go
    select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    isnull(min(级别),0) as 级别最小值,
    isnull(max(级别),9999) as 级别最大值
    from yourtablename group by 商品名称, 型号
    order by 商品名称 desc, 型号
      

  6.   

    select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    min(级别) as 级别最小值,
    max(级别) as 级别最大值
    from yourtablename where 级别<>0--这里group by 商品名称, 型号
    order by 商品名称 desc, 型号
      

  7.   

    2.在数据源的表中,如果级别值是<Null>的话,上述代码统计出来的级别也会有问题。请修改函数,如果发现级别值为null或者为空的话,则不参与最后级别的排序。这句到底什么意思?级别没有参与到函数中
      

  8.   


    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);set @sql=''
    --distinct 
    select @sql=@sql+ isnull(颜色+',','') from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    endselect 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    min(isnull(级别,9999)) as 级别最小值,
    max(isnull(级别,0)) as 级别最大值
    from yourtablename group by 商品名称, 型号
    order by 商品名称 desc, 型号
      

  9.   

    是这个意思,我举例说明吧。商品 级别1 级别2
    A    0     5
    A    2     0
    A    4     9最后的记录的效果是级别最小值至级别最大值为  2-9,而不是0至9,所以用where级别<>0不行,因为等于0 的那条数据,可能还要参与其他逻辑。
      

  10.   

    那要改查询语句,应该级别不影响颜色select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    min(case 级别 when 0 then null else 级别 end) as 级别最小值,
    max(case 级别 when 0 then null else 级别 end) as 级别最大值
    from yourtablename group by 商品名称, 型号
    order by 商品名称 desc, 型号
    你综合可用的颜色函数试下
      

  11.   

    select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    级别最小值=(select min(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0),
    级别最大值=(select max(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0)
    from yourtablename awhere 级别<>0--这里group by 商品名称, 型号
    order by 商品名称 desc, 型号
      

  12.   

    select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    级别最小值=(select min(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0),
    级别最大值=(select max(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0)
    from yourtablename agroup by 商品名称, 型号
    order by 商品名称 desc, 型号
      

  13.   

    我去试下各位的code,一会给分
      

  14.   

    create table yourtablename(商品名称 varchar(4),型号 varchar(1),参数1 int,
    参数2 int,库存 int,颜色 varchar(2),级别 int)
    insert into yourtablename
    select '手机','A',500,510,2,'红',1 union all
    select '手机','A',515,530,4,'黄',3 union all
    select '手机','B',540,560,4,null,2 union all
    select '手机','B',570,585,4,'蓝',6 union all
    select '手机','B',589,600,3,'黑',3 union all
    select '手机','C',620,670,5,null,5 union all
    select '手机','C',680,710,7,null,4 union all
    select '手机','D',720,750,6,'黑',7 union all
    select '电脑','A',111,119,1,'黑',4 union all
    select '电脑','B',120,322,2,'黑',5 union all
    select '电脑','B',330,340,4,'黑',3
    --drop table yourtablename
    大家注意一下,我稍微修改了一下数据,再用上面修改过的函数会有问题
      

  15.   

    drop table yourtablename
    create table yourtablename(商品名称 varchar(4),型号 varchar(1),参数1 int,
    参数2 int,库存 int,颜色 varchar(2),级别 int)
    insert into yourtablename
    select '手机','A',500,510,2,'红',1 union all
    select '手机','A',515,530,4,'黄',3 union all
    select '手机','B',540,560,4,null,2 union all
    select '手机','B',570,585,4,'蓝',6 union all
    select '手机','B',589,600,3,'黑',3 union all
    select '手机','C',620,670,5,null,5 union all
    select '手机','C',680,710,7,null,4 union all
    select '手机','D',720,750,6,'黑',7 union all
    select '电脑','A',111,119,1,'黑',4 union all
    select '电脑','B',120,322,2,'黑',5 union all
    select '电脑','B',330,340,4,'黑',3
    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);set @sql=''
    --distinct 
    select @sql=@sql+ 颜色+',' from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号 
    and 颜色 is not null---这里加个条件
    ) aa
    set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
    select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    min(级别) as 级别最小值,
    max(级别) as 级别最大值
    from yourtablename group by 商品名称, 型号
    order by 商品名称 desc, 型号/*
    商品名称 型号   参数1最小值      参数2最大值      种类          库存          颜色                   级别最小值       级别最大值
    ---- ---- ----------- ----------- ----------- ----------- -------------------- ----------- -----------
    手机   A    500         530         2           6           红,黄                  1           3
    手机   B    540         600         3           11          黑,蓝                  2           6
      

  16.   

    create function getcolor
    (@商品名称 varchar(40),@型号 varchar(1))
    returns varchar(20)
    as
    begin
    declare @sql varchar(40);set @sql=''
    --distinct 
    select @sql=@sql+ isnull(颜色,'无')+',' from (
    select distinct 颜色 from yourtablename where 
    商品名称=@商品名称 and 型号=@型号 
    ) aa
    if len(@sql)>2 
    set @sql=replace(@sql,'无,','')
    else
    set @sql=replace(@sql,'无','')set @sql=substring(@sql,1,len(@sql)-1)
    return @sql
    end
      

  17.   


    这个你试了没?select 商品名称, 型号, 
    min(参数1) as 参数1最小值,
    max(参数2) as 参数2最大值,
    count(*) as 种类, 
    sum(库存) as 库存,
    dbo.getcolor(商品名称, 型号) as 颜色,
    min(isnull(级别,9999)) as 级别最小值,
    max(isnull(级别,0)) as 级别最大值
    from yourtablename group by 商品名称, 型号
    order by 商品名称 desc, 型号