私は自分自身で修正しようとしましたが、解決策が見つからなかったので多分助けてください。私は、次のしているクエリは:それは偉大な作業だが、問題は、一部のユーザーは2または3切り抜いたのnummbersを持っているということですSQLクエリを選択したときにダブル結果が表示される
select users.name,users.userid,position,department.name,num,phone.pname,objpict.fname
from users
inner join opict on opict.ownerid=users.id
inner join department on department.id=users.deptid
inner join phone on phone.ownerid=users.id
where quitted=0 and tag='web' and opict.del=0 and phone.del=0 and phone.ownertype=5
ので選択resoultは次のようになります。
Name UserID Number
------ ------ --------
David Test 12345678
David Test 11111111
だから、問題は、その出力が2倍になりますです。あなたの場合は
select case
when row_number() over (partition by users.userId order by users.userId) = 1
then users.name
else NULL
end as userName
, users.userid
, position
, department.name
, num
, phone.pname
, objpict.fname
from users
inner join opict
on opict.ownerid = users.id
inner join department
on department.id = users.deptid
inner join phone
on phone.ownerid = users.id
where quitted = 0
and tag = 'web'
and opict.del = 0
and phone.del = 0
and phone.ownertype = 5
:あなたはCASE
の文と一緒にROW_NUMBER()
を利用することができ、重複する値を表示したくない場合は
Name UserID Number
------ ------ --------
David Test 12345678
Test 11111111
これはアプリケーションコードで行います。 SQLはそのような操作を行うのには適していません。 – GurV
ユーザーあたり1行、電話番号ごとに1列を使用するには、ユーザーあたり複数の行ではなく、別の方法を採用することをお勧めします。これは、電話番号の最大数と限定数(2-3音が良い)がある場合にのみ機能します。 [Example here](http://stackoverflow.com/questions/10196237/sql-select-phone-numbers-from-a-many-to-many-table-with-different-types-mobile) –