2013-03-19 2 views
0

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

Старый код, который работал не простофили:

SELECT 
    dbo.dateonly(ctl.datetrans) AS DateRecorded, 
    L.Clientkey AS ClientNum, 
    L.Fullname, 
    cs.Datesvc, 
    cs.chargekey, 
    ctl.CheckNum, 
    ctl.ReceivedFrom, 
    ctl.Delta, 
    CONVERT(varchar(10), dept.deptkey) AS Deptkey, 
    dept.DeptName, 
    dept.PgmName, 
    CONVERT(varchar(10), dept.pgmKey) AS PGMKey, 
    ctl.Transtypelu 
FROM 
    bil_Chargetranslog ctl 
    LEFT JOIN dbo.BIL_ChargeSlips cs 
     ON cs.Chargekey = ctl.Chargekey 
    LEFT JOIN dbo.BLV_Clients L 
     ON cs.ClientKey = L.ClientKey 
    LEFT JOIN Blv_DeptPgm dept 
     ON dept.Pgmkey = cs.PgmLU 
WHERE 
    (
     ctl.Transtypelu = 4 
     AND (
      (
       ctl.descr <> 'Client Payment' 
       AND ctl.descr <> 'Copayment' 
      ) OR ctl.descr IS NULL 
     ) 
    ) 

UNION ALL 

/* note below that the checknum is converted to a varchar for the query*/ 
SELECT 
    dbo.dateonly(daterecorded) AS daterecorded, 
    L.Clientkey AS ClientNum, 
    L.Fullname, 
    DatePayment, 
    NULL AS chargekey, 
    CONVERT(varchar(15), checknum) AS checknum, 
    NULL AS receivedfrom, 
    (- 1 * Amount) AS delta, 
    CONVERT(varchar(10), dept.deptkey) AS Deptkey, 
    dept.DeptName, 
    dept.PgmName, 
    CONVERT(varchar(10), dept.pgmKey) AS PGMKey, 
    4 AS transtypelu 
FROM 
    bil_clientdeposit 
    LEFT JOIN dbo.BLV_Clients L 
     ON bil_clientdeposit.ClientKey = L.ClientKey 
    LEFT JOIN Blv_DeptPgm dept 
     ON dept.Pgmkey = Bil_ClientDeposit.PgmKey 

Это мой новый код:

SELECT 
    dbo.dateonly(ctl.datetrans) AS DateRecorded, 
    L.Clientkey AS ClientNum, 
    L.Fullname, 
    cs.Datesvc, 
    cs.chargekey, 
    ctl.CheckNum, 
    ctl.ReceivedFrom, 
    ctl.Delta, 
    CONVERT(varchar(10), dept.deptkey) AS Deptkey, 
    dept.DeptName, 
    dept.PgmName, 
    CONVERT(varchar(10), dept.pgmKey) AS PGMKey, 
    ctl.Transtypelu, 
    pr.PlanName 
FROM 
    bil_Chargetranslog ctl 
    LEFT JOIN dbo.BIL_ChargeSlips cs 
     ON cs.Chargekey = ctl.Chargekey 
    LEFT JOIN dbo.BLV_Clients L 
     ON cs.ClientKey = L.ClientKey 
    LEFT JOIN Blv_DeptPgm dept 
     ON dept.Pgmkey = cs.PgmLU 
    left join BIL_ARTRANSLOG AR 
     ON ctl.chargekey = ar.chargekey 
    left join BIL_PAYORPLANS PR 
     ON PR.PAYORPLANKEY = AR.PAYORPLANKEY 
WHERE 
    (
     ctl.Transtypelu = 4 
     and ar.TransTypeLU = 4 
     AND (
      (
       ctl.descr <> 'Client Payment' 
       and AR.ARDescr <> 'Client Payment' 
       AND ctl.descr <> 'Copayment' 
       and AR.ARDescr <> 'Copayment' 
      ) OR ctl.descr IS NULL 
      or ar.ARDescr is null 
     ) 
    ) 

UNION ALL 

/* note below that the checknum is converted to a varchar for the query*/ 
SELECT 
    dbo.dateonly(daterecorded) AS daterecorded, 
    L.Clientkey AS ClientNum, 
    L.Fullname, 
    DatePayment, 
    NULL AS chargekey, 
    CONVERT(varchar(15), checknum) AS checknum, 
    NULL AS receivedfrom, 
    (- 1 * Amount) AS delta, 
    CONVERT(varchar(10), dept.deptkey) AS Deptkey, 
    dept.DeptName, 
    dept.PgmName, 
    CONVERT(varchar(10), dept.pgmKey) AS PGMKey, 
    4 AS transtypelu, 
    NULL as planname 
FROM 
    bil_clientdeposit 
    LEFT JOIN dbo.BLV_Clients L 
     ON bil_clientdeposit.ClientKey = L.ClientKey 
    LEFT JOIN Blv_DeptPgm dept 
     ON dept.Pgmkey = Bil_ClientDeposit.PgmKey 

Я добавил линии:

left join BIL_ARTRANSLOG AR 
    ON ctl.chargekey = ar.chargekey 
left join BIL_PAYORPLANS PR 
    ON PR.PAYORPLANKEY = AR.PAYORPLANKEY 

ответ

0

Разница между "союзом" и «union all» состоит в том, что последний возвращает все записи, в то время как первый возвращает отдельные записи. Если вы не хотите дублировать записи, используйте первый.

+0

плохо попробовать это быстро и пусть вы знаете, спасибо Дэну. – ProfessorKaos64

+0

ничего, я думаю, что проблема с некоторыми строками иногда содержит дополнительные данные, а другие нет. Ill проверите это только с помощью элемента SELECT. – ProfessorKaos64

+0

Если это так, они не являются повторяющимися строками. –

0

Если вы добавили несколько дополнительных объединений и вдруг увидели повторяющиеся строки, возможно, существует взаимосвязь «один ко многим» в одной или обеих связанных таблицах, которая не существует в других связанных таблицах. Попробуйте сделать SELECT * и посмотреть, что разные столбцы находятся на том, что кажется дублирующими.

Вы можете удалить дубликаты, предваряя ваши SELECT заявления с:

SELECT DISTINCT 
    dbo.dateonly(ctl.datetrans) AS DateRecorded, 
    L.Clientkey AS ClientNum, 
    L.Fullname, 
    .... 
+0

Хорошая идея, я не вижу, что выбирает меня первым. – ProfessorKaos64

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