2

I am using following query to select certain values

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;

In where b.ownerId = @old ownerId has multiple same values in the column, I want to select distinct or unique on it. So that query is done on distinct ownerId only.

Please let me know how to achieve this.

For example : column ownerId has values

2231
2231
2231
3341
2231

So I want the query to use only 2231 once rather than for all occurrences of 2231

4

3 回答 3

3

您需要在 ownerId 上使用 GROUP BY,但随后您需要在 select 语句中的所有其他字段上使用一些聚合函数

如果您想要一个唯一的 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
于 2013-09-14T15:03:44.650 回答
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
于 2013-09-15T02:49:02.080 回答
0

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

select sb.company ,b.id as Id ,bds.id as PId ,brp.bId from

(select max(b.ownerId) ownerId from supp where b.ownerId = @oId;) Input_table

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

抱歉格式不好!

于 2013-09-14T19:23:39.020 回答