这能写成sql直接查出来吗?

解决方案 »

  1.   

    select 内容,ID form table group by 内容,ID 
    类别区分是标准啊 看似毫无规律
      

  2.   

    汗,这种SQL语句写出来是骂自己啊
      

  3.   

    SQL 2000中需要用到函数的实现,测试表中根据你的条件增加了一个category字段,用于分类另外,你那个测试中写的东西有点脏,所以去除了create table tb (
            id int
          , value varchar(10)
          , No varchar(10)
          , category int
           )
    insert  into tb
    values  ( 1, 'SSS', '101', 1 ) 
    insert  into tb
    values  ( 2, 'SSS', '102', 1 ) 
    insert  into tb
    values  ( 3, 'SSS', '103', 1 ) 
    insert  into tb
    values  ( 4, 'SSS', '210', 2 ) 
    insert  into tb
    values  ( 5, 'SSS', '204', 2 ) 
    insert  into tb
    values  ( 6, 'SSS', '201', 2 ) 
    insert  into tb
    values  ( 7, 'SSS', '304', 3 ) 
    insert  into tb
    values  ( 8, 'FFF', '305', 3 ) 
    insert  into tb
    values  ( 9, 'FFF', '123', 1 ) 
    insert  into tb
    values  ( 10, 'FFF', '112', 1 ) 
    insert  into tb
    values  ( 11, 'FFF', '345', 3 ) 
    insert  into tb
    values  ( 12, 'FFF', '244', 2 ) 
    insert  into tb
    values  ( 13, 'FFF', '222', 2 ) 
    go CREATE FUNCTION dbo.f_str (
            @value varchar(10)
          , @category int
           )
    RETURNS varchar(8000)
    AS 
        BEGIN 
            DECLARE @r varchar(8000) 
            SET @r = '' 
            SELECT  @r = @r + ',' + cast(id as varchar(10))
            FROM    tb
            WHERE   value = @value
                    and category = @category
            RETURN STUFF(@r, 1, 1, '') 
        END 
    GO CREATE FUNCTION dbo.f_str1 (
            @value varchar(10)
          , @category int
           )
    RETURNS varchar(8000)
    AS 
        BEGIN 
            DECLARE @r varchar(8000) 
            SET @r = '' 
            SELECT  @r = @r + ',' + No
            FROM    tb
            WHERE   value = @value
                    and category= @category 
            RETURN STUFF(@r, 1, 1, '') 
        END 
    GO 
    GO -- 调用函数 
    SELECt  value
          , dbo.f_str(value, category) as 内容
          , dbo.f_str1(value, category)as 号码
          , category
    FROM    tb
    GROUP BY value
          , categorygo
    drop table tb 
    drop function dbo.f_str 
    drop function dbo.f_str1 
      

  4.   

    用一个计算列,可能更有意思一点create table tb (
            id int
          , value varchar(10)
          , No varchar(10)
          , category as substring(no, 1, 1)
           )
    insert  into tb
    values  ( 1, 'SSS', '101' ) 
    insert  into tb
    values  ( 2, 'SSS', '102' ) 
    insert  into tb
    values  ( 3, 'SSS', '103' ) 
    insert  into tb
    values  ( 4, 'SSS', '210' ) 
    insert  into tb
    values  ( 5, 'SSS', '204' ) 
    insert  into tb
    values  ( 6, 'SSS', '201' ) 
    insert  into tb
    values  ( 7, 'SSS', '304' ) 
    insert  into tb
    values  ( 8, 'FFF', '305' ) 
    insert  into tb
    values  ( 9, 'FFF', '123' ) 
    insert  into tb
    values  ( 10, 'FFF', '112' ) 
    insert  into tb
    values  ( 11, 'FFF', '345' ) 
    insert  into tb
    values  ( 12, 'FFF', '244' ) 
    insert  into tb
    values  ( 13, 'FFF', '222' ) 
    go CREATE FUNCTION dbo.f_str (
            @value varchar(10)
          , @category char(1)
           )
    RETURNS varchar(8000)
    AS 
        BEGIN 
            DECLARE @r varchar(8000) 
            SET @r = '' 
            SELECT  @r = @r + ',' + cast(id as varchar(10))
            FROM    tb
            WHERE   value = @value
                    and category = @category
            RETURN STUFF(@r, 1, 1, '') 
        END 
    GO CREATE FUNCTION dbo.f_str1 (
            @value varchar(10)
          , @category char(1)
           )
    RETURNS varchar(8000)
    AS 
        BEGIN 
            DECLARE @r varchar(8000) 
            SET @r = '' 
            SELECT  @r = @r + ',' + No
            FROM    tb
            WHERE   value = @value
                    and category = @category 
            RETURN STUFF(@r, 1, 1, '') 
        END 
    GO 
    GO -- 调用函数 
    SELECt  value
          , dbo.f_str(value, category) as 内容
          , dbo.f_str1(value, category) as 号码
          , category as 分类
    FROM    tb
    GROUP BY value
          , categorygo
    drop table tb 
    drop function dbo.f_str 
    drop function dbo.f_str1 
    GO
      

  5.   

    SQL 我倒是不会。不过,用 VB 代码‘内部解决’,还是可以做到的。她那个‘类别’,似乎就是按‘号码’的最左边一位来划分的。
      

  6.   


    SQL 语句所支持的汇总函数没有字符串连接的。所以,你必须分类查询后,用循环代码自行连接。
      

  7.   

    我K,杯具!SQL 2000的实现我已给出了解决方案,竟然没看到一个认同的!满眼都是灌水。楼主要求中明显是按照号码的第一个字母进行分类了,所有我才有了上面新增分类列,或者用计算列的处理方式,因为直接用substring(no,1,1)进行分组是不能通过的。这是一个SQL中典型的合并列值问题,根本就没有那么神奇,却搞的乌烟瘴气!如果能看到有人给出SQL 2005之后提供的OUTER APPLY或VB中直接循环字符串处理等实际解决方式,我欣慰了。
      

  8.   

    用 VB代码 处理哪有难度啊!
    可楼主要的是 SQL ,我写出来有什么意义呢。SQL语句我不会,你的代码我也无法测试。对你的代码我也无法进行评价…………
      

  9.   

    楼主发到SQL区,保证3分钟之内解决了
      

  10.   

    刚才我看楼主在发此贴前的两分钟就在 SQL版 发了,过了一天多,似乎没有搞定。
      

  11.   

    没搞错吧,难道SQL版的大牛都集体休假去啦