Проблемы с использованием нескольких условий для выполнения определенных критериев - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь создать запрос, который позволит мне выполнить несколько таблиц информации по ряду критериев, однако я не могу заставить это работать, когда дело доходит до использования нескольких предложений WHERE одного типа.

use leads;

select s.knum as Knum
    , s.customer_id as Cust_#
    , s.[full down] as FD_Date
    , s.season, s.inv as Room_Type
    , s.Owner_type
    , s.status
    , s.trw1
    , s.trw2
    , s.trw21
    , s.state
    , m.Knum as MagnaK
    , c.[pbs id] as MF_ID
    , c.[pbs disp] as MF_disp
    , c.[pbs freq] as Freq
    , c.[PBS DAYS DELQ] as MF_del
    , c.[PBS TOTAL DUE] as MF_Due
    , c.[LN ID]
    , c.[LN DISP]
    , c.[LN CURR BAL]
    , c.[LN NPDD]
    , st.customer_id as ST_custID
    , p.[LOAN #] as P_Knum
    , p.pmts_made as Paymnts_made
    , p.int
    , p.d30
    , p.d60
    , p.d90
    , d.knum as DVN_Knum
    , (
            select max(HighTrw) 
            from (values (trw1), (trw2), (trw21)) as Value(HighTrw)
        ) as [high_trw]
from dbo.spi s
LEFT JOIN dbo.magna m on s.knum = m.knum
LEFT JOIN dbo.book7 C on s.knum = C.K
LEFT JOIN dbo.spi_tours ST on s.customer_id = st.customer_id 
LEFT JOIN dbo.payments P on s.knum = P.[LOAN #]
LEFT JOIN dbo.dvn D on s.knum = d.knum
Where m.knum = null 
    and d.knum = null 
    and st.customer_id = null 
    or 
    (
        select max(HighTrw)
        from (values (trw1), (trw2), (trw21)) As updatedate (HighTrw)
    ) between 600 and 625 
    and p.current_bal >= '15000' 
    and p.CURRENT_Bal >= '7500' 
    or 
    (
        select max(HighTrw)
        from (values (trw1), (trw2), (trw21)) As updatedate (HighTrw)
    ) between 575 and 599 
    and p.current_bal >= '7499' 
    and p.CURRENT_Bal >= '5000';

Я хотел бы иметь возможность использовать 6 таблиц, связанных в коде, вместе с конкретными критериями, чтобы составить окончательный список на основе этих критериев.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Моя лучшая догадка о ваших предикатах - что-то вроде этого.

Where m.knum IS null 
    and d.knum IS null 
    and st.customer_id IS null 
    AND
    (
        (
            select max(HighTrw)
            from (values (trw1), (trw2), (trw21)) As updatedate (HighTrw)
        ) between 600 and 625 
        and p.current_bal >= '15000' 
        and p.CURRENT_Bal >= '7500' 
    )
    OR 
    (
        (
            select max(HighTrw)
            from (values (trw1), (trw2), (trw21)) As updatedate (HighTrw)
        ) between 575 and 599 
        and p.current_bal >= '7499' 
        and p.CURRENT_Bal >= '5000'
    )

Но это можно значительно упростить, используя CROSS APPLY для ваших значений вместо того, чтобы делать это снова и снова.

1 голос
/ 14 октября 2019

В вашем запросе несколько опечаток. Я попытался отформатировать и упростить его, чтобы можно было исправить.

SELECT s.knum as Knum, 
    s.customer_id as Cust_#,
    s.[full down] as FD_Date, 
    s.season, 
    s.inv as Room_Type, 
    s.Owner_type, 
    s.status, 
    s.trw1, 
    s.trw2, 
    s.trw21, 
    s.state, 
    m.Knum as MagnaK,
    c.[pbs id] as MF_ID, 
    c.[pbs disp] as MF_disp, 
    c.[pbs freq] as Freq, 
    c.[PBS DAYS DELQ] as MF_del, 
    c.[PBS TOTAL DUE] as MF_Due, 
    c.[LN ID], 
    c.[LN DISP], 
    c.[LN CURR BAL], 
    c.[LN NPDD], 
    st.customer_id as ST_custID, 
    p.[LOAN #] as P_Knum, 
    p.pmts_made as Paymnts_made, 
    p.int, 
    p.d30, 
    p.d60, 
    p.d90, 
    d.knum as DVN_Knum, 
    v.HighTrw as [high_trw]
FROM      dbo.spi       s
LEFT JOIN dbo.magna     m  on s.knum = m.knum
LEFT JOIN dbo.book7     C  on s.knum = C.K
LEFT JOIN dbo.spi_tours ST on s.customer_id = st.customer_id 
LEFT JOIN dbo.payments  P  on s.knum = P.[LOAN #]
LEFT JOIN dbo.dvn       D  on s.knum = d.knum
CROSS APPLY (select max(HighTrw) 
            from (values (s.trw1), (s.trw2), (s.trw21))val(trw)) as v(HighTrw)
Where m.knum        IS NULL 
and d.knum          IS NULL 
and st.customer_id  IS NULL 
or (v.HighTrw between 600 and 625 and p.current_bal BETWEEN '7500' AND '15000')
or (v.HighTrw between 575 and 599 and p.current_bal BETWEEN '5000' AND '7499');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...