2017-06-15 249 views
-1

我有一個表像下面:如何選擇共享相同標識但具有不同名稱的記錄?

Col_Name Col_Id Col_Flag 
    A   1  1 
    A   1  2 
    B   1  1 
    C   2  1 
    C   2  2 

這些記錄,我想獲得其Col_Id由目前存在的Col_Name上面的共享,該示例的結果,期望的結果是返回Col_Id1,因爲它由AB共享,我不想Col_Id = 2得到返回,因爲只有C正在使用此值。

並且,相同Col_Name的總數正在使用相同Col_Id不限於2,這意味着Col_Flag可以是大於2

任何建議將不勝感激。謝謝。

+0

這是非常基本的SQL。你爲什麼不能自己解決這個問題?你嘗試了什麼,出了什麼問題? –

+0

@TabAlleman,有什麼想法? – LONG

回答

2
SELECT COL_ID,count(distinct COL_NAME) FROM TABLE 
GROUP BY COL_ID 
having count(distinct COL_NAME)>1 
+0

謝謝,這個作品完美! – LONG

0

試試這個

SELECT COL_ID FROM test9 
GROUP BY COL_ID 
having COUNT(DISTINCT COL_Name)>1 
+0

這是不正確的。 'A'和'B'在'Having'之前不會被分組 – LONG

0

使用上col_id自聯接和WHERE子句,以不同的COL_NAME輸出到這些情況限制:

select distinct 
    a.col_id 
from 
    some_table as a 
    inner join some_table as b on a.col_id=b.col_id 
where 
    a.col_name <> b.col_name; 
0
;WITH CTE(COL_NAME,COL_ID,COL_FLAG) 
AS 
(
SELECT 'A', 1,1 UNION ALL 
SELECT 'A', 1,2 UNION ALL 
SELECT 'B', 1,1 UNION ALL 
SELECT 'C', 2,1 UNION ALL 
SELECT 'C', 2,2 
) 
SELECT COL_ID, 
     COL_NAME FROM 
(
SELECT COL_ID,COL_NAME, 
COUNT(COL_NAME)OVER(PARTITION BY COL_ID,COL_NAME ORDER BY COL_NAME) AS UNIQENAME 
FROM CTE 
)DT 
WHERE DT.UNIQENAME=1 
相關問題