有一个企业表和一个样品
根据企业的ID可以发布多个样品,这些样品有可能是连续发的
在列表上显示出来的话,很有可能都是显示一个企业发布的样品,这样不行,你看可不可以,每个企业只显示一个样品
比如说一页显示33个样品,也是就是33个企业的样品(都显示一个),如果还有余下的企业以此例推,到下一页,如果根据企业ID发布的样品都显示一个完之后,接着显示样品的第二个,按照上面的显示方法以此例推
企业表Corpoation_cn  字段 cid
样品表Product_cn     字段 id,cid,pname,pic 
拜求,本人在线等

解决方案 »

  1.   

    select distinct(cid),id,pname,pic from Product_cn 
      

  2.   


    select distinct(cid),id,pname,pic from Product_cn order by id 
      

  3.   

    deknight
     
    (追逐梦想) 
    比如说有说个企业,10个企业中发布样品的数量不同.
    最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
    如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
      

  4.   

    比如企业A B各发布5个产品,你的意思是
    先取出
    A 1 B 1 然后
    A 2 B 2
    A 3 B 3
    一直到最后?
    我还是没明白你上面的描述
      

  5.   

    deknight
     
    (追逐梦想) 
    楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
      

  6.   

    zyl_leilei
     
    (小蕾) 
    是这样的
      

  7.   

    select distinct(cid),id,pname,pic from Product_cn order by datetime
      

  8.   

    zyl_leilei
     
    (小蕾)  
    楼上的,可不可写出来,让我参考下
      

  9.   


     挺难的` group by 和 distanct 都不好用``
      

  10.   

    你要的这个,不是1个SQL能出来的
      

  11.   

    deknight
     
    (追逐梦想) 
    我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
    这是我的思路
    每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
    可不可以
      

  12.   

    晕死,看了半天,是看下面的回复和你的回复才看懂意思了,
    用存储过程分页查询吧:
    没时间整理,自己整理吧CREATE PROCEDURE GetRecordFromPage 
        @tblName      varchar(255),       -- 表名 
        @fldName      varchar(255),       -- 字段名 
        @PageSize     int = 10,           -- 页尺寸 
        @PageIndex    int = 1,            -- 页码 
        @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回 
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序 
        @strWhere     varchar(4000) = ''  -- 查询条件 (注意: 不要加 where) 
    AS 
     
    declare  @strSQL   varchar(6000)     -- 主语句 
    declare @strTmp   varchar(6000)     -- 临时变量 
    declare @strOrder varchar(6000)       -- 排序类型 
     
    if @OrderType != 0 
    begin 
        set @strTmp = '<(select min' 
        set @strOrder = ' order by [' + @fldName +'] desc' 
    end 
    else 
    begin 
        set @strTmp = '>(select max' 
        set @strOrder = ' order by [' + @fldName +'] asc' 
    end 
     
    set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
        + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
        + @strOrder 
     
    if @strWhere != '' 
        set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
            + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
            + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
            + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') ' 
            + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder 
     
    if @PageIndex = 1 
    begin 
        set @strTmp = '' 
        if @strWhere != '' 
            set @strTmp = ' where (' + @strWhere + ')' 
     
        set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
            + @tblName + ']' + @strTmp + ' ' + @strOrder 
    end 
     
    if @IsCount != 0 
        set @strSQL = 'select count(*) as Total from [' + @tblName + ']' 
     
    exec (@strSQL) 
    GO go
    if exists (select * from sysobjects where xtype='p' and name='UP_Test_Page')
    drop proc UP_Test_Page
    gocreate proc UP_Test_Page
      @pageSize int,
      @pageIndex int
    as 
    declare @n int
    begin

    select * into ##temp from ( select * from test) a

    set @n = (select count(*) from ##temp)
    if(@pageIndex <1)
    set @pageIndex=1
    exec GetRecordFromPage '##temp','tid',@pageSize,@pageIndex,'0','0',''
    drop table ##temp
    return @n

    end go
      

  13.   

    对于db2 V9及以上的,应该可以用如下sql:
    select pname, cid 
    from
    (select pname, cid, row_number() over (partition by cid order by id) as order_no
    from   Product_cn ) as tmp
    order by order_no