2017-02-11 3 views
-1

У меня есть база данных, в которой есть издатели, и каждый месяц они представляют лист времени. Для того, чтобы найти издателей, которые представили отчет в этом месяце я выполнить этот запрос, чтобы показать мне все отчеты издателя, представленные в этом месяце ...Произвести результаты из нескольких SQL-запросов

SELECT    c2.FullName AS ContactFullName, 
        c2.LastName AS ContactLastName, 
        c2.ContactId AS PublisherGUID, 
        f2.jajw_groupname AS FSGName, 
        b2.jajw_FieldServiceGroup AS FieldServiceGroupGUID, 
        b2.jajw_reportId AS ReportGUID, 
        b2.jajw_id AS ReportID, 
        b2.jajw_ReportMonthId AS ReportMonthGUID, 
        b2.jajw_ReportYearId AS ReportYearGUID, 
        r2.jajw_name AS ReportMonthName, 
        r2.jajw_CalendarDate AS ReportMonthCalDate, 
        y2.jajw_name AS ReportYearName 

FROM    ContactBase AS c2 
LEFT JOIN   jajw_reportBase AS b2 ON c2.ContactId = b2.jajw_PublisherId 
LEFT JOIN   jajw_reportyearBase AS y2 ON b2.jajw_ReportYearId = y2.jajw_reportyearId 
LEFT JOIN   jajw_reportmonthBase AS r2 ON b2.jajw_ReportMonthId = r2.jajw_reportmonthId 
LEFT JOIN   jajw_fieldservicegroupBase AS f2 ON b2.jajw_FieldServiceGroup = f2.jajw_fieldservicegroupId 
WHERE    c2.StateCode = '0' 
AND     b2.jajw_ReportYearId = 'A507DFBF-B9CE-E611-A953-002248013EC3' 
AND     c2.jajw_CongregationAssignment != 640840001 
AND     c2.jajw_CongregationAssignment != 640840005 
AND     c2.jajw_CongregationAssignment != 640840006 
AND     c2.jajw_CongregationAssignment != 640840007 
ORDER BY ContactLastName 

Следующий шаг, чтобы получить подмножество издателей, которые не представили отчет, так что следующий запрос извлекает все издатели, а затем говорит мне, какие из них находятся не в приведенном выше запросе:

WITH 
ALLPUBLISHERSUNFILTERED AS 
(
SELECT    c2.FullName AS ContactFullName, 
        c2.LastName AS ContactLastName, 
        c2.ContactId AS PublisherGUID 
FROM    ContactBase AS c2 
WHERE    c2.StateCode = '0' 
AND     c2.jajw_CongregationAssignment != 640840001 
AND     c2.jajw_CongregationAssignment != 640840005 
AND     c2.jajw_CongregationAssignment != 640840006 
AND     c2.jajw_CongregationAssignment != 640840007 
), 

REPORTERS AS 
(
SELECT    c2.FullName AS ContactFullName, 
        c2.LastName AS ContactLastName, 
        c2.ContactId AS PublisherGUID, 
        f2.jajw_groupname AS FSGName, 
        b2.jajw_FieldServiceGroup AS FieldServiceGroupGUID, 
        b2.jajw_reportId AS ReportGUID, 
        b2.jajw_id AS ReportID, 
        b2.jajw_ReportMonthId AS ReportMonthGUID, 
        b2.jajw_ReportYearId AS ReportYearGUID, 
        r2.jajw_name AS ReportMonthName, 
        r2.jajw_CalendarDate AS ReportMonthCalDate, 
        y2.jajw_name AS ReportYearName 

FROM    ContactBase AS c2 
LEFT JOIN   jajw_reportBase AS b2 ON c2.ContactId = b2.jajw_PublisherId 
LEFT JOIN   jajw_reportyearBase AS y2 ON b2.jajw_ReportYearId = y2.jajw_reportyearId 
LEFT JOIN   jajw_reportmonthBase AS r2 ON b2.jajw_ReportMonthId = r2.jajw_reportmonthId 
LEFT JOIN   jajw_fieldservicegroupBase AS f2 ON b2.jajw_FieldServiceGroup = f2.jajw_fieldservicegroupId 
WHERE    c2.StateCode = '0' 
AND     b2.jajw_ReportYearId = 'A507DFBF-B9CE-E611-A953-002248013EC3' 
AND     c2.jajw_CongregationAssignment != 640840001 
AND     c2.jajw_CongregationAssignment != 640840005 
AND     c2.jajw_CongregationAssignment != 640840006 
AND     c2.jajw_CongregationAssignment != 640840007 
) 

SELECT   a.ContactFullName, 
       a.ContactLastName, 
       a.PublisherGUID 
     FROM  ALLPUBLISHERSUNFILTERED a 
     WHERE NOT EXISTS (SELECT * 
          FROM  REPORTERS rp 
          WHERE  a.PublisherGUID = rp.PublisherGUID) 

Последним шагом является кусок я борюсь с. Мне нужно объединить два набора результатов вместе, чтобы получить список с комбинированными результатами.

+2

* HELP * не является полезным описание проблемы или вопрос!. Вы предпринимали какие-либо усилия, чтобы сделать это самостоятельно до публикации? Если да, то какая конкретная проблема вы столкнулись с тем, что мы можем помочь решить? У вас есть ** конкретная проблема **, а не * пожалуйста, напишите этот SQL для меня * сообщение? (И TSQL - это особый термин SQL-Server, который не может включать MySQL. Важно сопоставлять ваши теги с тем, что вы на самом деле используете, а не просто добавлять в случайном порядке те, которые похожи на те, которые похожи. Метки имеют актуальность здесь и диалекты SQL очень разные по функциональности и синтаксису.) –

+1

'WITH()' не поддерживается в MySQL. – Parfait

+0

И просто соедините два с полем индикатора с выдающимися результатами SELECT. – Parfait

ответ

0

Просто заполните UNION запрос заполнения NULL в полях без соответствующих данных. И рассмотрим добавление поля индикатора для представленного/не представили такие как PublisherType:

WITH 
ALLPUBLISHERSUNFILTERED AS 
(
SELECT    'NOT SUBMITTED' AS PublisherType, 
        c2.FullName AS ContactFullName, 
        c2.LastName AS ContactLastName, 
        c2.ContactId AS PublisherGUID, 
        NULL AS FSGName, 
        NULL AS FieldServiceGroupGUID, 
        NULL AS ReportGUID, 
        NULL AS ReportID, 
        NULL AS ReportMonthGUID, 
        NULL AS ReportYearGUID, 
        NULL AS ReportMonthName, 
        NULL AS ReportMonthCalDate, 
        NULL AS ReportYearName 
FROM    ContactBase AS c2 
WHERE    c2.StateCode = '0' 
AND     NOT c2.jajw_CongregationAssignment 
        IN (640840001, 640840005, 640840006, 640840007) 
), 

REPORTERS AS 
(
SELECT    'SUBMITTED' AS PublisherType, 
        c2.FullName AS ContactFullName, 
        c2.LastName AS ContactLastName, 
        c2.ContactId AS PublisherGUID, 
        f2.jajw_groupname AS FSGName, 
        b2.jajw_FieldServiceGroup AS FieldServiceGroupGUID, 
        b2.jajw_reportId AS ReportGUID, 
        b2.jajw_id AS ReportID, 
        b2.jajw_ReportMonthId AS ReportMonthGUID, 
        b2.jajw_ReportYearId AS ReportYearGUID, 
        r2.jajw_name AS ReportMonthName, 
        r2.jajw_CalendarDate AS ReportMonthCalDate, 
        y2.jajw_name AS ReportYearName 

FROM    ContactBase AS c2 
LEFT JOIN   jajw_reportBase AS b2 ON c2.ContactId = b2.jajw_PublisherId 
LEFT JOIN   jajw_reportyearBase AS y2 ON b2.jajw_ReportYearId = y2.jajw_reportyearId 
LEFT JOIN   jajw_reportmonthBase AS r2 ON b2.jajw_ReportMonthId = r2.jajw_reportmonthId 
LEFT JOIN   jajw_fieldservicegroupBase AS f2 ON b2.jajw_FieldServiceGroup = f2.jajw_fieldservicegroupId 
WHERE    c2.StateCode = '0' 
AND     b2.jajw_ReportYearId = 'A507DFBF-B9CE-E611-A953-002248013EC3' 
AND     NOT c2.jajw_CongregationAssignment 
        IN (640840001, 640840005, 640840006, 640840007) 
) 

SELECT * 
FROM  ALLPUBLISHERSUNFILTERED a 
WHERE NOT EXISTS 
     (SELECT  1 
      FROM  REPORTERS rp 
      WHERE  a.PublisherGUID = rp.PublisherGUID) 

UNION ALL 

SELECT * 
FROM  REPORTERS 
+0

Спасибо @parfait, что сработало удовольствие! –

Смежные вопросы