简体   繁体   中英

SQL how to cross reference two unrelated tables

I need to cross reference from these 2 tables and display only the matching contindex from the first table if the contindex from the other table matches. Below is an image of what i have. Also the code is pasted below.

select t.ContIndex, t.clientcode, t.debttranname as ClientName, DebtDetService,
case when DebtTranType = 3 then 'Invoice' else 'Credit Memo' end as Type, d.amount,
REPLACE(REPLACE(REPLACE(CAST(FeeNarrative As varchar(max)),
CHAR(10) + CHAR(13), ' '), CHAR(10), ' '), CHAR(13), ' ') as Narrative
from tblTranDebtorDetail d
inner join tbltrandebtor t on t.DebtTranIndex=d.DebtTranIndex
where DebtTranDate > 'jan 1 2015' and t.debttrantype in (3,6) 
and DebtDetService = 'abr reimb'

select w.contindex /*, ClientCode, ClientName, Job_Name, 
case when TransTypeIndex=1 then 'Time' else 'Exp' end as Type, sum(wipamount)*/
from tblTranWIP w
inner join tblJob_Header h on h.job_idx=w.ServPeriod and h.ContIndex=w.ContIndex
inner join tblengagement e on e.ContIndex=w.ContIndex
inner join tblstaff s on s.StaffIndex=w.StaffIndex
where wipoutstanding <>0 and h.Job_Template in (99,100) and TransTypeIndex in (1,2)
--group by w.contindex, ClientCode, ClientName, Job_Name, TransTypeIndex

我所拥有的预览

Basically I need to show only the top table rows that match the bottom table contindex.

Sounds like the tables are related by contindex , no? Anyhow, copy and pasting your code and adding just a little bit extra should do the trick:

select t.ContIndex, t.clientcode, t.debttranname as ClientName, DebtDetService,
case when DebtTranType = 3 then 'Invoice' else 'Credit Memo' end as Type, d.amount,
REPLACE(REPLACE(REPLACE(CAST(FeeNarrative As varchar(max)),
CHAR(10) + CHAR(13), ' '), CHAR(10), ' '), CHAR(13), ' ') as Narrative
from tblTranDebtorDetail d
inner join tbltrandebtor t on t.DebtTranIndex=d.DebtTranIndex
where DebtTranDate > 'jan 1 2015' and t.debttrantype in (3,6) 
and DebtDetService = 'abr reimb'
and t.ContIndex IN
(

    select w.contindex /*, ClientCode, ClientName, Job_Name, 
    case when TransTypeIndex=1 then 'Time' else 'Exp' end as Type, sum(wipamount)*/
    from tblTranWIP w
    inner join tblJob_Header h on h.job_idx=w.ServPeriod and h.ContIndex=w.ContIndex
    inner join tblengagement e on e.ContIndex=w.ContIndex
    inner join tblstaff s on s.StaffIndex=w.StaffIndex
    where wipoutstanding <>0 and h.Job_Template in (99,100) and TransTypeIndex in (1,2)
    --group by w.contindex, ClientCode, ClientName, Job_Name, TransTypeIndex
)

The additional code is the WHERE t.contindex IN (<yoursecondquery>) You could accomplish the same thing with an INNER JOIN too, but this is a quick-fix given that you already wrote out both queries seperately.

You can use an IN or EXISTS here.. You just need to alter the second query slightly to add a WHERE condition if you use EXISTS.

SELECT
    t.ContIndex,
    t.clientcode,
    t.debttranname AS ClientName,
    DebtDetService,
    CASE WHEN DebtTranType = 3 THEN 'Invoice'
         ELSE 'Credit Memo'
    END AS Type,
    d.amount,
    REPLACE(REPLACE(REPLACE(CAST(FeeNarrative AS VARCHAR(MAX)),CHAR(10) + CHAR(13),' '),CHAR(10),' '),CHAR(13),' ') AS Narrative
FROM
    tblTranDebtorDetail d
    INNER JOIN tbltrandebtor t ON t.DebtTranIndex = d.DebtTranIndex
WHERE
    DebtTranDate > 'jan 1 2015'
    AND t.debttrantype IN (3,6)
    AND DebtDetService = 'abr reimb'
    AND EXISTS ( SELECT
                    w.contindex
                 FROM
                    tblTranWIP w
                    INNER JOIN tblJob_Header h ON h.job_idx = w.ServPeriod
                                                  AND h.ContIndex = w.ContIndex
                    INNER JOIN tblengagement e ON e.ContIndex = w.ContIndex
                    INNER JOIN tblstaff s ON s.StaffIndex = w.StaffIndex
                 WHERE
                    t.ContIndex = w.contindex -- new where clause
                    AND wipoutstanding <> 0
                    AND h.Job_Template IN (99,100)
                    AND TransTypeIndex IN (1,2) )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM