2017-02-22 10 views
0

私は自分自身で修正しようとしましたが、解決策が見つからなかったので多分助けてください。私は、次のしているクエリは:それは偉大な作業だが、問題は、一部のユーザーは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 
+7

これはアプリケーションコードで行います。 SQLはそのような操作を行うのには適していません。 – GurV

+0

ユーザーあたり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) –

答えて

2

:私は、それはこのようにフォーマットされることをどのように修正することができますNULLを表示したくない場合は、「空白」を使用してCASE文の2番目の枝をelse ''に変更することができます。

+0

ありがとう:)私はより多くの "ケース"を追加する必要があったが、それは働いている:)あなたの助けをすべてありがとう。 –

関連する問題