首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这个sql怎么写

2012-12-16 
这个sql如何写?表product。productid(主键),dealerid(商家id),pic(图片),productname(产品名称)11url1a21ur

这个sql如何写?
表product。
productid(主键),dealerid(商家id),pic(图片),productname(产品名称)
1                  1              url1        a
2                  1              url2        b
3                  2              url3        c

根据dealerid分组,每个dealerid只能取出一行数据。注意是一行数据。

比如这个可以取出 2,3两行或者1,3两行。

这样的sql不可以的

select dealerid,max(productid),max(pic),max(productname) from product group by dealerid    

这样只保证了其他列取出一个,并不能保证取出的都是一行的。

[最优解释]
2005以后可用:

;
WITH    huang
          AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY dealerid ORDER BY productid ) pid ,
                        productid ,
                        dealerid ,
                        pic ,
                        productname
               FROM     product
             )
    SELECT  *
    FROM    huang
    WHERE   pid = 1

[其他解释]
use tempdb
go


if object_id('#') is not null drop table # 
create table #(productid int primary key,dealerid int,pic nvarchar(200),productname nvarchar(50))
insert into #(productid,dealerid,pic,productname) values
(1,1,'url1','a'),(2,1,'url2','b'),(3,2,'url3','c')


-- sql:
select * from #  a where a.productid=(select max(productid) from # where dealerid=a.dealerid)

[其他解释]
--(1,3):
select * from #  a where a.productid=(select min(productid) from # where dealerid=a.dealerid)


热点排行