我查出来的数据是这个样子的。bigclassname                smlclassname
西服类                       休闲系列
西服类                       正装系列
西服类                       短袖系列
T恤类                        V领带系列
T恤类                        POLO系列
工装类                       餐饮娱乐系列
工装类                       学生校服系列
外套类                       风衣系列
外套系列                     大衣系列。我的SQL语句是这个样子的
sql="select bigclassname, smlclassname, receivedate from bigclassbook, smlclassbook where bigclassbook.bigclassindex=smlclassbook.bigclassindex  " 最终我想实现的效果是这个样子的:
西服类  休闲系列,正装系列,短袖系列
T恤类   V领系统,POLO系列
工装类  餐饮娱乐系列,学生校服系列
外套类  风衣系列,大衣系列
请问应该如何实现。

解决方案 »

  1.   

    加个排序列NUM,
    再用行转列搞定
      

  2.   

    http://topic.csdn.net/u/20091013/15/9f058df7-4d29-47bf-a338-b63fcab2abc0.html?51371
      

  3.   

    SELECT bigclassname,
    smlclassname ,
    (SELECT COUNT(*) FROM TB WHERE bigclassname=T.bigclassname AND smlclassname <=T.smlclassname)AS NUM 
    FROM TB T再用行转列
    http://topic.csdn.net/u/20090912/14/25d2e1b2-f352-4713-8618-d3433ba27bef.html?99104(经典帖子) 
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-10-14 11:01:07
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    go 
    create table [TB]([bigclassname] varchar(8),[smlclassname] varchar(12))
    insert [TB]
    select '西服类','休闲系列' union all
    select '西服类','正装系列' union all
    select '西服类','短袖系列' union all
    select 'T恤类','V领带系列' union all
    select 'T恤类','POLO系列' union all
    select '工装类','餐饮娱乐系列' union all
    select '工装类','学生校服系列' union all
    select '外套类','风衣系列' union all
    select '外套系列','大衣系列'
    --------------开始查询--------------------------
    select [bigclassname], [smlclassname]=stuff((select ','+[smlclassname] from tb t where [bigclassname]=tb.[bigclassname] for xml path('')), 1, 1, '') 
    from tb 
    group by [bigclassname] ----------------结果----------------------------
    /* bigclassname smlclassname
    ------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    T恤类          V领带系列,POLO系列
    工装类          餐饮娱乐系列,学生校服系列
    外套类          风衣系列
    外套系列         大衣系列
    西服类          休闲系列,正装系列,短袖系列(5 行受影响)
    */
      

  5.   

    select bigclassname, smlclassname into # from bigclassbook, smlclassbook where bigclassbook.bigclassindex=smlclassbook.bigclassindex  order by bigclassname
    declare @smlclassname varchar(1000), @bigclassname varchar(100)
    update # set @smlclassname = case when bigclassname = @bigclassname then @smlclassname = @smlclassname + ',' + smlclassname else smlclassname end,
      smlclassname = @smlclassname, @bigclassname = bigclassname
    select bigclassname, max(smlclassname) from # group bigclassname
      

  6.   

    if object_id('[TB]') is not null drop table [TB]
    go 
    create table [TB]([bigclassname] varchar(8),[smlclassname] varchar(12))
    insert [TB]
    select '西服类','休闲系列' union all
    select '西服类','正装系列' union all
    select '西服类','短袖系列' union all
    select 'T恤类','V领带系列' union all
    select 'T恤类','POLO系列' union all
    select '工装类','餐饮娱乐系列' union all
    select '工装类','学生校服系列' union all
    select '外套类','风衣系列' union all
    select '外套系列','大衣系列'create table #(bigclassname varchar(8), smlclassname varchar(100))insert #
    select bigclassname, smlclassname from tb order by bigclassnamedeclare @smlclassname varchar(100), @bigclassname varchar(100)
    update # set @smlclassname = case when bigclassname = @bigclassname then @smlclassname + ',' + smlclassname else smlclassname end,
      smlclassname = @smlclassname, @bigclassname = bigclassnameselect bigclassname, max(smlclassname) as smlclassname from # group by bigclassname
    /*
    bigclassname smlclassname                                                                                         
    ------------ ---------------------------------------------------------------------------------------------------- 
    T恤类          V领带系列,POLO系列
    工装类          餐饮娱乐系列,学生校服系列
    外套类          风衣系列
    外套系列         大衣系列
    西服类          休闲系列,正装系列,短袖系列
    */
      

  7.   

    create table [TB]([bigclassname] varchar(8),[smlclassname] varchar(12))
    insert [TB]
    select '西服类','休闲系列' union all
    select '西服类','正装系列' union all
    select '西服类','短袖系列' union all
    select 'T恤类','V领带系列' union all
    select 'T恤类','POLO系列' union all
    select '工装类','餐饮娱乐系列' union all
    select '工装类','学生校服系列' union all
    select '外套类','风衣系列' union all
    select '外套系列','大衣系列'
    godeclare @sql varchar(8000)
    set @sql = 'select bigclassname '
    select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then smlclassname else '''' end) [smlclassname' + cast(px as varchar) + ']'
    from (select distinct px from (select * ,px = (select count(1) from tb where bigclassname = t.bigclassname and smlclassname < t.smlclassname) + 1 from tb t)m) as a
    set @sql = @sql + ' from (select * ,px = (select count(1) from tb where bigclassname = t.bigclassname and smlclassname < t.smlclassname) + 1 from tb t)m group by bigclassname'
    exec(@sql) 
    drop table tb/*
    bigclassname smlclassname1 smlclassname2 smlclassname3 
    ------------ ------------- ------------- ------------- 
    T恤类          POLO系列        V领带系列         
    工装类          餐饮娱乐系列        学生校服系列        
    外套类          风衣系列                        
    外套系列         大衣系列                        
    西服类          短袖系列          休闲系列          正装系列
    */
      

  8.   


    create table tb(bigclassname varchar(20),smlclassname varchar(20))
    insert tb select
    '西服类',                      '休闲系列' union all select 
    '西服类',                      '正装系列' union all select 
    '西服类',                      '短袖系列' union all select 
    'T恤类' ,                       'V领带系列' union all select 
    'T恤类' ,                       'POLO系列' union all select 
    '工装类' ,                     '餐饮娱乐系列' union all select 
    '工装类' ,                     '学生校服系列' union all select 
    '外套类' ,                     '风衣系列' union all select 
    '外套系列',                    '大衣系列'
    if object_id('f_str')is not null drop function f_str
    go 
    create function f_str(@str varchar(20))
    returns varchar(100)
    as
    begin 
    declare @s varchar(100)
    select @s=isnull(@s+',','')+smlclassname from tb
    where bigclassname=@str
    return @s
    end
    go update tb set bigclassname= case when bigclassname='外套系列' then '外套类' else bigclassname end select bigclassname,smlclassname=max(dbo.f_str(bigclassname))
    from tb 
    group by  bigclassnamebigclassname         smlclassname
    -------------------- ----------------------------------------------------------------------------------------------------
    T恤类                  V领带系列,POLO系列
    工装类                  餐饮娱乐系列,学生校服系列
    外套类                  风衣系列,大衣系列
    西服类                  休闲系列,正装系列,短袖系列(4 行受影响)
    drop table tb
      

  9.   

    请问下如果在access数据库里怎么实现这咱结果呢?在ac里面执行sql语句有语法错误!
      

  10.   

    我的数据库是Access,SQL里边的执行后有语法错误。。