36

クロス適用関数から取得した結果をそのまま結合できるかどうかはよくわかりません。

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

このクエリで左結合を追加したかった:

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'

しかし、それを行うと、本来あるべきよりも多くのレコードが得られます。

これはしばらく実行されています。基本的に、内側のクロス適用クエリは 204 個のアイテムを生成し、それをメイン クエリのアイテムと結合したままにしておきたいと考えました。しかし、私は何か間違ったことをしています。正確にはわかりません。助けていただければ幸いです。

4

1 に答える 1

63

OUTERAPPLYを使用します。また、OUTERAPPLYの後のON句が本当に必要かどうかもわかりません。請求書IDが入ってくるのと同じである場合、おそらくそうではありません。

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
于 2013-02-19T20:57:00.050 に答える