سؤال

وهنا الوضع أنا في عندي جدول يحتوي على معلومات الشعوب. يتم استيراد بعضها من نظام آخر في حين يتم استيراد بعض يدويا. ما أود القيام به هو سحب الجميع في، ولكن إذا كان هناك سجل دخل يدويا وسجل التي تم استيرادها، وأريد لتحديد فقط واحدة المستوردة (لأنه من المرجح أكثر حتى الآن).

وهنا هو ما قلته حتى الآن، لكنه لا يبدو قادرا على العمل (فإنها ترجع فقط السجلات إدخالها يدويا):

SELECT --fields go here
FROM
        (
                SELECT PERSON_UID, instype
                FROM AdmitsInterfaceTable
                WHERE instype='M' --Manually entered people
            EXCEPT
                SELECT PERSON_UID, instype
                FROM AdmitsInterfaceTable
                WHERE instype='I' --Imported people
        ) P,
        AdmitsInterfaceTable A
     WHERE 
        P.PERSON_UID=A.PERSON_UID
        AND P.instype=A.instype

ولدي شعور هذا لا يعمل بسبب الاستعلام الداخلي سحب أيضا في العمود instype، ولكن لا أستطيع التفكير في أي وسائل أفضل للقيام بذلك. أي نصيحة؟

هل كانت مفيدة؟

المحلول

 SELECT PERSON_UID, instype
    FROM AdmitsInterfaceTable a
    WHERE instype='I' --get all imported people            
 union -- plus all manuals who are not also imported
 SELECT PERSON_UID, instype
    FROM AdmitsInterfaceTable a
    WHERE instype='M' --Imported people
    and not exists (  -- without imported matches
     select * from FROM AdmitsInterfaceTable b
     WHERE instype='I' and b.person_uid = a.person_uid);

نصائح أخرى

ويمكنك أن تحاول:

SELECT CASE WHEN b.person_UID is null THEN a.person_UID ELSE person_UID END, 
CASE WHEN b.person_UID is null THEN a.instype   ELSE instype   END
--and so forth through all the columns you want
FROM
(SELECT PERSON_UID, instype  -- add list of additional fields you need here
from AdmitsInterfaceTable  WHERE instype='M' ) A
LEFT JOIN
(SELECT PERSON_UID, instype  -- add list of additional fields you need here
from AdmitsInterfaceTable  WHERE instype='I' ) B on A.PERSON_UID = B.PERSON_UID
SELECT --fields go here
FROM AdmitsInterfaceTable A
 WHERE 
    P.PERSON_UID=A.PERSON_UID
    AND P.instype=A.instype
AND instype='M' --Manually entered people
AND person_uid not in (
SELECT PERSON_UID FROM AdmitsInterfaceTable
WHERE instype='I' --Imported people
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top