2017-03-28 3 views
0

Bitte nehmen Sie sich einen Blick von unten SQL:Wie DB Datensätze zu erhalten, den anderen Wert von derselben Spalte in derselben Tabelle hat

SELECT TOP 3 acct_num from acct_package 
where package_key IN 
(
    select package_key from acct_serv 
    where serv_id = 'A1' 
    and package_key IN (             
         select package_key from acct_serv 
         where serv_id = 'B1' 
         and package_key IN(
              select package_key from acct_serv 
              where serv_id = 'C1' 
             ) 
        ) 
) 

Im Fall hatten keine andere Tabellen Beziehung.

Ich kann die Daten abrufen, die ich von der oben genannten SQL brauche, aber ich denke, vielleicht haben andere Codierung effektiver.

vielen dank für die hilfe !!!

+1

Bitte fügen Sie weitere Details hinzu. einige Beispieldaten und erforderliche Ausgabe, um Ihre Frage besser zu verstehen. –

Antwort

0
SELECT TOP 3 acct_num 
from acct_package ap 
where exists (select 1 
       from acct_serv a1 
       where a1.package_key = ap.package_key and serv_id = 'A1') 
and exists (select 1 
      from acct_serv a2 
      where a2.package_key = ap.package_key and serv_id = 'B1') 
and exists (select 1 
      from acct_serv a3 
      where a3.package_key = ap.package_key and serv_id = 'C1') 
+0

thx zum teilen! –

1

Dies ist ein weiterer Ansatz (denken Sie bitte daran ORDER BY zu verwenden, wenn Sie TOP xx verwenden, sonst führen nicht vorhersehbar ist) (Ich versuchte es auf Oracle DB, ohne TOP natürlich):

SELECT TOP 3 ACCT_NUM 
FROM ACCT_PACKAGE A 
INNER JOIN (SELECT PACKAGE_KEY, SUM(RC) AS SUM_TOT 
      FROM (SELECT PACKAGE_KEY, SERV_ID, 1 AS RC 
        FROM ACCT_SERV 
        WHERE SERV_ID IN ('A1','B1','C1') 
        GROUP BY PACKAGE_KEY, SERV_ID  
       ) B 
      GROUP BY PACKAGE_KEY 
      ) C ON A.PACKAGE_KEY = C.PACKAGE_KEY 
WHERE SUM_TOT >=3 
ORDER BY A.PACKAGE_KEY; 
+0

thx zum teilen! –

Verwandte Themen