日期:2014-05-18  浏览次数:20494 次

如何将某一字段相同的多条记录中,筛选出一条记录
通过表一左联结到表二,会得到型号相同但产品号不同的多条记录,怎样能每个型号只选取一条记录,像表三那样。尝试用DISTINCT 不好用。

表一
型号 产量 价格
HP5100 100 5000
HP5200 200 6500
HP3548 300 7800

表二
产品号 型号
AAA HP5100
BBB HP5100
CCC HP5100
DDD HP5200
EEE HP5200
FFF HP3548
GGG HP3548
JJJ HP3548
KKK HP3548


表三
产品号 型号 产量 价格
BBB HP5100 100 5000
DDD HP5200 200 6500
JJJ HP3548 300 7800


------解决方案--------------------
SQL code

declare @表一 table (型号 varchar(6),产量 int,价格 int)
insert into @表一
select 'HP5100',100,5000 union all
select 'HP5200',200,6500 union all
select 'HP3548',300,7800

declare @表二 table (产品号 varchar(3),型号 varchar(6))
insert into @表二
select 'AAA','HP5100' union all
select 'BBB','HP5100' union all
select 'CCC','HP5100' union all
select 'DDD','HP5200' union all
select 'EEE','HP5200' union all
select 'FFF','HP3548' union all
select 'GGG','HP3548' union all
select 'JJJ','HP3548' union all
select 'KKK','HP3548'

select *,(SELECT TOP 1 产品号 FROM @表二 WHERE 型号=A.型号 ORDER BY NEWID()) 
from @表一 A 
/*
型号     产量          价格          
------ ----------- ----------- ----
HP5100 100         5000        BBB
HP5200 200         6500        DDD
HP3548 300         7800        GGG
*/