在where子句上选择distinct

时间:2013-09-14 03:59:49

标签: sql sql-server sql-server-2008 tsql

我正在使用以下查询来选择特定值

select 
    sb.company
    ,b.id  as Id
    ,bds.id as PId
    ,brp.bId
from supp b
left outer join sales bds on (bds.sId = b.id)
left outer join tperiod brp on (brp.id = bds.rId)
left outer join tbuyer sb on (sb.id = brp.bId)
where  
    b.ownerId = @oId;

where b.ownerId = @old中,ownerId在列中有多个相同的值,我想在其上选择distinct或unique。因此,查询仅在不同的ownerId上完成。

请告诉我如何实现这一目标。

例如:列ownerId具有值

2231
2231
2231
3341
2231

所以我希望查询只使用2231而不是所有出现的2231

3 个答案:

答案 0 :(得分:3)

您需要在ownerId上使用GROUP BY,但是您需要在select statment中的所有其他字段上使用某些聚合函数

如果您想要一个唯一的ownerId并且其他相关字段不同,那么SQL需要知道要显示的内容。您是否只想在相关字段中使用MAX值?您要求所有者使用唯一值,那么如果连接的字段具有该ownerId的不同值,您只想显示什么?

根据您的需要,这可能会有效。

select 
 MAX(sb.company)
,MAX(b.id)  as Id
,MAX(bds.id) as PId
,MAX(brp.bId)
from supp b
  left outer join sales bds on (bds.sId = b.id)
  left outer join tperiod brp on (brp.id = bds.rId)
  left outer join tbuyer sb on (sb.id = brp.bId)
where  
  b.ownerId = @oId
GROUP BY b.ownerId

答案 1 :(得分:1)

由于您要根据所有者ID唯一性选择值,因此您必须使用group by子句并在select子句中给出“distinct”,如

select distinct
   sb.company
   ,b.id  as Id
   ,bds.id as PId
   ,brp.bId
from supp b
left outer join sales bds on (bds.sId = b.id)
left outer join tperiod brp on (brp.id = bds.rId)
left outer join tbuyer sb on (sb.id = brp.bId)
where  b.ownerId = @oId
group by b.ownerId

答案 2 :(得分:0)

这是简单的方法............ 在表Input_table中获取@oid并加入表Supp。

  

选择       sb.company       ,b.id为Id       ,bds.id为PId       ,brp.bId来自

     

(从supp中选择max(b.ownerId)ownerId,其中b.ownerId = @oId;)   Input_table

     

Inner join supp b on temp_tab.ownerId = b.ownerId left outer join   sales bds on(bds.sId = b.id)left outer join tperiod brp on(brp.id =   bds.rId)左外连接tbuyer sb on(sb.id = brp.bId)

抱歉格式不好!