2017-02-22 62 views
0

我試圖通過我自己解決這個問題,但我找不到任何解決方案,所以也許你可以提供幫助。我有以下查詢:當選擇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 

它的工作很好,但問題是,有些用戶有2個或3個不同勢nummbers所以選擇resoult將是:

Name  UserID Number 
------ ------ -------- 
David Test  12345678 
David Test  11111111 

所以問題是,輸出將是雙。我該如何解決,這將是這樣的格式:

Name  UserID Number 
------ ------ -------- 
David Test  12345678 
     Test  11111111 
+7

在您的應用程序代碼中執行此操作。 SQL不適合做這種操作。 – GurV

+0

您最好採取另一種方法,以便每個用戶有1行,每個電話號碼有1個列,而不是每個用戶有多行。只有當您擁有最大限量的電話號碼時(2-3聽起來不錯),這才能起作用。 [示例這裏](http://stackoverflow.com/questions/10196237/sql-select-phone-numbers-from-a-many-to-many-table-with-different-types-mobile) –

回答

2

如果你不想顯示重複值,您可以用CASE聲明一起使用ROW_NUMBER()

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 

如果您不想要NULL顯示,並且想要一個「空白區域」,您可以將CASE語句的第二個分支更改爲else ''

+0

謝謝:)我不得不添加更多的「案例」,但它的工作:)謝謝你的幫助。 –