[英]Selecting distinct on where clause
我正在使用以下查询来选择某些值
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列中具有多个相同值的情况下,我想在其上选择不同的或唯一的。 因此,该查询仅在不同的ownerId上完成。
请让我知道如何实现这一目标。
例如:列ownerId
具有值
2231
2231
2231
3341
2231
因此,我希望查询仅使用2231次,而不是所有2231次出现
您需要在ownerId上使用GROUP BY,但是随后您将需要在select语句中的所有其他字段上使用一些聚合函数
如果您希望唯一的ownerId且其他相关字段不同,则SQL需要知道要显示的内容。 您是否只想要相关字段上的MAX值? 您正在要求所有者的唯一值,因此,如果联接的字段对该所有者ID具有不同的值,您只想显示什么?
根据您的需要,这可能会起作用。
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
由于要基于所有者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
这是简单的方法…………。 在表Input_table中获取@oid并与表Supp联接。
从中选择sb.company,b.id作为Id,bds.id作为PId,brp.bId
(从supp中选择max(b.ownerId)ownerId,其中b.ownerId = @oId;)Input_table
temp_tab.ownerId = b.ownerId上的内部联接支持b左(bds.sId = b.id)上的外部联接销售bds上(brp.id = bds.rId)左外部联接tbriod左上(sb .id = brp.bId)
对不起,格式不好!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.