sql A sinistra unisci una domanda con una croce si applicano



sql-server tsql (1)

Non sono sicuro di poter lasciare unire i risultati che ottengo da una funzione di cross application:

select
iv.invoiceno
,w.warehouse
,iv.invoicedate
,iv.invoicedesc
,iv.status
,iv.billingstart as [BillingFrom]
,iv.billingend as [BillingTo]
,CAST((iv.invoicesubtotal) as NUMERIC(38,2))as [Sub-Total] 
,CAST((((iv.invoicesubtotal+iv.invoicetax)-iv.invoicetotal)) as NUMERIC(38,2)) as [Discount]
,CAST((iv.invoicetax) as NUMERIC(38,2)) as [SalesTax]
,CAST((iv.invoicetotal) as NUMERIC(38,2)) as [Total]
,d.deal
,d.dealno
,ivt.orderno 
,ivt.rectype    
,ivt.rectypedisplay                                
,RTRIM(ivt.masterno) as [ICode]                               
,ivt.description as [ICodeDesc]                            
,ivt.fromdate as [From]                                
,ivt.todate as [To]                                  
,CAST((ivt.days ) as NUMERIC(38,2)) as [days]                                  
,CAST(ivt.qty as NUMERIC(38,0)) as [qty]                                  
,CAST((ivt.cost) as NUMERIC(38,2)) as [UnitCost]                                   
,CAST((ivt.rate) as NUMERIC(38,2)) as [rate]                                      
,CAST((ivt.daysinwk)as NUMERIC(38,2)) as [D/W]                              
,CAST((ivt.discountamt)as NUMERIC(38,2)) as [Discount]                             
,CAST((ivt.extended)as NUMERIC(38,2)) as [extended]                               
,(CASE WHEN ivt.taxable='T' then 'YES' else 'NO' END)as [Taxable]
,ivt.category
,(CASE WHEN (ivt.cost > 0 and ivt.rectype='R') THEN CAST((ivt.revenuebase) as NUMERIC (38,2)) ELSE 0 END) as [subrevenue]  from invoice iv
inner join deal d                                   on d.dealid=iv.dealid
inner join invoiceitemview ivt                      on iv.invoiceid=ivt.invoiceid and iv.invoiceno=ivt.invoiceno
inner join warehouse w                              on w.locationid=iv.locationid and w.inactive<>'T'
left join category c                                on c.categoryid=ivt.categoryid 
left join ordernoteview n                           on ivt.orderid=n.orderid and n.billing ='T'  where iv.locationid='00009V5H' and iv.invoiceno='H513369' and iv.status in ('CLOSED', 'PROCESSED') and iv.nocharge<>'T'         order by iv.invoiceno, iv.invoicedate,c.category,ivt.masterno

Volevo aggiungere un join di sinistra con questa query:

select  tot.gldate, tot.glno, tot.glacctdesc,                  
   tot.debit,tot.credit,tot.glaccountid                       from invoice ivt cross apply dbo.funcglforinvoice(ivt.invoiceid, null, null) as tot where ivt.invoiceno='H513369'

ma quando lo faccio, mi da modo di ottenere più dischi, quindi dovrebbero esserlo.

Questo è stato in esecuzione per un po '. Fondamentalmente la query della croce interiore applica 204 elementi e volevo che rimanessero uniti agli elementi della query principale; ma sto facendo qualcosa di sbagliato, non so esattamente cosa. L'aiuto sarà apprezzato.


Usa ESTERNO APPLY. Inoltre non sono sicuro che la clausola ON dopo l'APPLICAZIONE ESTERNA sia realmente necessaria. Se l'invoiceid è lo stesso che esce, probabilmente no.

Select iv.invoiceno, iv.invoiceitem,iv.invoiceno
   from invoice iv
inner join deal d
        on d.dealid=iv.dealid
inner join invoiceitemview ivt
        on iv.invoiceid=ivt.invoiceid and iv.invoiceno=ivt.invoiceno
inner join warehouse w
        on w.locationid=iv.locationid and w.inactive<>'T'
left join category c
        on c.categoryid=ivt.categoryid 
left join ordernoteview n
        on ivt.orderid=n.orderid and n.billing ='T'
OUTER APPLY dbo.funcglforinvoice(iv.invoiceid, null, null) as tot




tsql