2017-05-02 7 views
0

タイトルはあまり明確ではないので、私は謝罪しますが、助けが必要です。特定の値を持つ一意の識別子を選択する

私は下のデータのテーブルを持っている

:だから私は1

にmain_contact_flagが設定したcontact_idを持っていない任意のgroup_idの年代をフィルタリングする必要が

GROUP_ID    CONTACT_ID   MAIN_CONTACT_FLAG 
    11000     28789      0 
    11000     28049      1 
    21890     10086      0 
    21890     10554      0 
    21489     14785      0 
    21464     12457      1 
    21654     14558      0 

所望の出力となります:

GROUP_ID    CONTACT_ID   MAIN_CONTACT_FLAG 
    21890     10086      0 
    21890     10554      0 
    21489     14785      0 
    21654     14558      0 

私は以下のクエリを試してみましたが、それらのどれも私が必要との結果与えない:

を事前にの
SELECT GROUP_ID,MAIN_CONTACT_FLAG FROM Contact_Group_Contacts_T 
WHERE MAIN_CONTACT_FLAG != 0 AND MAIN_CONTACT_FLAG != 1 
ORDER BY Group_ID DESC 

SELECT DISTINCT GROUP_ID,Main_Group_Contact_BT 
FROM Contact_Group_Contacts_T 
WHERE NOT EXISTS (SELECT * FROM Contact_Group_Contacts_T WHERE MAIN_CONTACT_FLAG IN (0,1)) 

おかげで、 ダン

+0

との簡単な方法があります'MAIN_CONTACT_FLAG'のデータ型?常にテーブル定義とRDBMSとバージョンを含める必要があります。 –

答えて

1
SELECT * FROM Contact_Group_Contacts_T t INNER JOIN 
    (SELECT GROUP_ID 
    FROM Contact_Group_Contacts_T 
    GROUP BY GROUP_ID 
    HAVING SUM(MAIN_CONTACT_FLAG)=0) sub ON t.GROUP_ID=sub.GROUP_ID 

それともグループIDが必要な場合は

SELECT GROUP_ID 
    FROM Contact_Group_Contacts_T 
    GROUP BY GROUP_ID 
    HAVING SUM(MAIN_CONTACT_FLAG)=0 

UPDATE:あなたがする番号にブール値(ビット)を小文字する必要が

合計

SUM(CASE WHEN MAIN_CONTACT_FLA G = 0 THEN ELSE 0 1 END)

+0

お返事ありがとうございます。私はあなたのクエリのいずれかを行う場合、私はこのエラーが発生しています:オペランドのデータ型のビットがサム演算子に無効です。 – dgoodwin

+0

回答が更新されました – StanislavL

0

これを試してみてください:

select * from 
(
    select *,max(MAIN_CONTACT_FLAG) over (partition by GROUP_ID) as final_flag 
    from tablename 
) 
where final_flag=0; 
0

TRY THIS:あなたはサブクエリ

select * 
from #tmp 
where group_id not in (select distinct group_id from #tmp where main_contact_flag = 1) 

OR NOT EXISTS

select t.* 
from #tmp t 
where not exists (select 1 
        from #tmp t1 where t.group_id = t1.group_id and t1.main_contact_flag = 1) 
を使用して所望の出力を達成することができます
0

あなたが必要です

SQLFiddle

select * from table1 t1 
where not exists 
(select 1 from table1 t2 
where t1.group_id=t2.group_id 
and t2.MAIN_CONTACT_FLAG = 1) 
+0

こんにちは、私はいくつかのテストの後にあなたのクエリを試しましたが、MAIN_CONTACT_FLAGを1に設定しているが、出力クエリでそれらのレコードを表示していないグループIDを取得しました – dgoodwin

+0

私はあなたと同じ私が与えたバイリンガルは、どこが壊れているのか把握することができます。 – Utsav

1

なたは多くの方法があります。

あなたNOT EXISTSバリアントは、このほかに、ほとんどのRDBMSで動作します:

SELECT DISTINCT GROUP_ID 
FROM Contact_Group_Contacts_T T1 
WHERE NOT EXISTS (
    SELECT * FROM Contact_Group_Contacts_T T2 
    WHERE T2.GROUP_ID = T1.GROUP_ID -- the missing piece! 
    AND T2.MAIN_CONTACT_FLAG = 1); 

PostgreSQLのでは、MAIN_CONTACT_FLAGboolean NOT NULLであると仮定すると、何aggregate function bool_or()

SELECT group_id 
FROM contact_group_contacts_t 
GROUP BY 1 
HAVING NOT bool_or(main_contact_flag); 
関連する問題