2017-10-04 71 views
-1

嗨,請幫助我獲得結果,其中具有不同輸入的點陣必須包含在結果中。請注意,不管有多少次,都有相同輸入的CustID不能包含在內。選擇相同的ID但在其他列中不同

樣品表

+------+------+ 
|CustID|Input | 
+------+------+ 
|123 |A  | 
+------+------+ 
|123 |A  | 
+------+------+ 
|123 |B  | 
+------+------+ 
|223 |A  | 
+------+------+ 
|223 |A  | 
+------+------+ 
|332 |A  | 

結果:

+------+------+ 
    |CustID|Input | 
    +------+------+ 
    |123 |A  | 
    +------+------+ 
    |123 |B  | 
    +------+------+ 

謝謝!

+1

請。標記DBMS(MySQL,MS SQL Server,Orcle等),您正在使用它。 –

+0

如果使用(123,A)添加另一行,是否還想要返回123行? – jarlh

+0

是的,但123只會出現兩次,因爲有兩個作爲輸入的條目應計爲一。 –

回答

0

你想記錄中,其中不同Input計數大於一個用於CustID更大。如果重複,您也想獲得不同的結果行。所以去掉重複的第一,每個CustID內計數,並保持所需的記錄:

select custid, input 
from 
(
    select custid, input, count(*) over (partition by custid) as cnt 
    from (select distinct custid, input from mytable) m 
) counted 
where cnt > 1; 

select top(1) with ties 
    custid, input 
from (select distinct custid, input from mytable) m 
order by case when count(*) over (partition by custid) = 1 then 1 else 2 end desc; 
+0

嘗試了這些腳本,但仍將CustID:123記爲3個條目(A,A,B)。應該只有兩個,因爲相同的條目必須計爲一個。 –

+0

你一定犯了一個錯誤。正如我在兩個查詢中選擇不同的custid,從mytable輸入,不再有任何重複。當然,它是「A」,而不是「A」和「A」。 –

0

可以通過多種方式完成,例如,使用EXISTS

SELECT DISTINCT CustID, Input 
FROM tablename t1 
WHERE EXISTS (SELECT 1 
       FROM tablename t2 
       WHERE t1.CustID = t2.CustID 
       AND t1.Input <> t2.Input) 

或者IN/GROUP BY

SELECT DISTINCT CustID, Input 
FROM tablename 
WHERE CustID IN (SELECT CustID 
       FROM tablename 
       GROUP BY CustID 
       HAVING COUNT(DISTINCT Input) > 1) 

之所以選擇取決於預期的結果SELECT DISTINCT或只是SELECT如果有重複。

0

請檢查這一項

select CustID,input from my_table 
    group by input,CustID having max(rowid) 
in (select max(rowid) from emp group by deptno); 
+0

emp和deptno從哪裏來? –

相關問題