我正在使用以下查询来选择特定值
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
答案 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)
抱歉格式不好!