2013-03-15 31 views
1
![TABLE][1] 

您好所有,排除如果行的列值相等同一個表

我有一個表,上面記載在那裏你可以2項爲每個N_ID。只有滿足以下條件,我纔想從中獲得記錄。

例如說

狀態列的值爲1 & 2 N_ID = 2和2 & 1 N_ID = 5,這意味着狀態值是不同的(即兩個1 & 2)。

但是,如果您看到N_ID = 3,則狀態列有1 & 1,這是相同的。

所以我想要的記錄不包括具有相同狀態值的N_ID(即其中包含1或2 & 2等等)。

在上述情況下,我只想要N_ID = 2,5的記錄。

感謝

回答

0

相同的狀態出現了多次的行嘗試使用EXISTS()選項並檢查COUNT(*)

SELECT * 
FROM dbo.test16 t 
WHERE t.Config_Type != 2 AND EXISTS (
       SELECT 1 
       FROM dbo.test16 t2 
       WHERE t.Networkelemenid = t2.Networkelemenid     
       GROUP BY t2.Networkelemenid, t2.Config_Type 
       HAVING COUNT(DISTINCT t2.Status) > 1 
      ) 

此腳本將數據分組在t2.Config_Type上。 HAVING COUNT(DISTINCT t2.Status)指定只有唯一行可以出現在結果集中(例如1,2 = 2; 1,1或2,2 = 1)

對於第二種情況,您需要此腳本

SELECT * 
FROM dbo.test41 t 
WHERE t.Config_Type != 2 AND EXISTS (
       SELECT 1 
       FROM dbo.test41 t2 
       WHERE t.Networkelemenid = t2.Networkelemenid     
       GROUP BY t2.Networkelemenid, t2.Config_Type, t2.Status 
       HAVING COUNT(t2.Status) > 1 
      ) 

Table

TABLE2

+0

不幸的是,我沒有得到正在期待的正確輸出。請參考上表和記錄。在這一點上,你可以看到每個N_Elem_Id的Config_Type爲3個記錄爲「1,1和2(標記爲RED)」,狀態列的值可能會隨着1和2的任意組合而改變。首先,我想獲得具有Config_Type!= 2,所以我會爲每個N_Elem_Id而不是3個記錄得到2條記錄。然後我的情況就在這裏。 – 2013-03-15 23:39:28

+0

條件:如果看到「狀態」列,我已突出顯示N_Eleme_ID爲2,11和16的紅色顏色值,類似於(1,1或2,2)。但是,如果看到其他N_Elem_Id 3,4,5具有不同的值(1和2或2和1)。最後,我只需要具有N_Elem_Id和3,4和5的記錄而不使用不同的記錄。 – 2013-03-15 23:39:44

+0

@Srinivasan Rajagopal我沒有看到你的例子在上面的問題。 – 2013-03-16 07:51:25

1

您可以使用EXISTS

SELECT * FROM dbo.TableName t1 
WHERE EXISTS(
    SELECT 1 FROM dbo.TableName t2 
    WHERE t1.N_ID = t2.N_ID 
    AND t1.Status <> t2.Status 
) 
+0

感謝蒂姆回答我。不幸的是,我沒有得到正在期待的正確輸出。請參考上表和記錄。在這一點上,你可以看到每個N_Elem_Id的Config_Type爲3個記錄爲「1,1和2(標記爲RED)」,狀態列的值可能會隨着1和2的任意組合而改變。首先,我想獲得具有Config_Type!= 2,所以我會爲每個N_Elem_Id而不是3個記錄得到2條記錄。然後我的條件就會出現在這裏 - > – 2013-03-15 22:52:47

+0

這是你提到在查詢中「C_type」這個列很重要的時候了。你能指定如何?你是否想按N_ID + C_type進行分組,並且只採用行組合也有不同狀態的行? – 2013-03-15 23:00:48

+0

條件:如果看到「狀態」列,我已突出顯示N_Eleme_ID爲2,11和16的紅色顏色值,類似於(1,1或2,2)。但是,如果看到其他N_Elem_Id 3,4,5具有不同的值(1和2或2和1)。最後,我只需要具有N_Elem_Id和3,4和5的記錄而不使用不同的記錄。 – 2013-03-15 23:02:36

1

您可以排除,你必須每ID

SELECT * 
    FROM TABLENAME tb 
    WHERE tb.N_ID NOT IN (
    SELECT tb.N_ID 
     FROM TABLENAME tb 
     GROUP BY tb.N_ID, tb.CONFIG_TYPE, tb.STATUS 
     HAVING COUNT(*) > 1) 

Table

+0

不幸的是,我沒有得到正在期待的正確輸出。請參考上表和記錄。在這一點上,你可以看到每個N_Elem_Id的Config_Type爲3個記錄爲「1,1和2(標記爲RED)」,狀態列的值可能會隨着1和2的任意組合而改變。首先,我想獲得具有Config_Type!= 2,所以我會爲每個N_Elem_Id而不是3個記錄得到2條記錄。然後我的情況就在這裏。 – 2013-03-15 23:34:31

+0

條件:如果看到「狀態」列,我已突出顯示N_Eleme_ID爲2,11和16的紅色顏色值,類似於(1,1或2,2)。但是,如果看到其他N_Elem_Id 3,4,5具有不同的值(1和2或2和1)。最後,我只需要具有N_Elem_Id和3,4和5的記錄而不使用不同的記錄。 – 2013-03-15 23:35:22

+0

只需將CONFIG_TYPE添加到GROUP BY子句。我修改了我的查詢。 – 2013-03-18 12:09:28

相關問題