Declare @Distribution Table(DistributionNo varchar(100),OrderReleasNum varchar(100))
INSERT INTO @Distribution
select Min(a.Distribution_GID) Distribution_GID,Item_GID from T_DistributionLinkItem a
left outer join (select Distribution_GID,min(LeaveTime) LeaveTime from T_Distribution group by Distribution_GID)b On a.Distribution_GID=b.Distribution_GID
where MainMark=1
group by a.Item_GID;DECLARE @Reconciliation Table
(
    IncomeIDs varchar(max),
ReconciliationNO varchar(50),
ReconciliationUser varchar(50),
ReconciliationDate varchar(20),
OrderReleaseNum varchar(20),
Customer varchar(200),
Amount decimal(18,2),
RemainAmount decimal(18,2),
InvoiceNo varchar(50),
OrderDate varchar(20),
[Weight] decimal(18,1),
Pieces int,
Volume decimal(18,3),
Re varchar(max),
RoadPortDept varchar(50),
RoadPortDest varchar(50),
FeeID varchar(20)
)    INSERT INTO @Reconciliation
    Select  A.IncomeID,
            A.ReconciliationNO,
A.ReconciliationUser,
A.ReconciliationDate,
C.OrderReleaseNum,
J.CHINESE_NAME Customer,
A.TotalAmount,
Isnull(A.Balance,A.TotalAmount) RemainAmount, 
E.InvoiceNo,
convert(varchar(10),C.OrderDate,120) OrderDate,
C.[Weight],
C.Pieces,
C.Volume,
C.Re,
H.DetpName as RoadPortDept,
I.DetpName as RoadPortDest,
    case when FeeID='DSK' then 'DSK' else 'NDSK' END ISDSK
     from T_Income A
    LEFT OUTER JOIN (SELECT MIN(INVOICEID) INVOICEID,BillDetailID FROM T_InvoiceLinkBillDetail GROUP BY     BillDetailID) B ON A.IncomeID=B.BillDetailID
    LEFT OUTER JOIN  OrderReleaseTC C ON A.OrderRelease_GID=C.OrderReleaseTC_GID
    LEFT OUTER JOIN @Distribution D ON A.OrderRelease_GID=D.OrderReleasNum
    LEFT OUTER JOIN T_Invoice E ON E.InvoiceID=B.InvoiceID 
    LEFT OUTER JOIN T_CompanyFrame H ON H.FID=C.RoadPortDept 
    LEFT OUTER JOIN T_CompanyFrame I ON I.FID=C.RoadPortDest 
    LEFT OUTER JOIN CORPORATION J ON J.CORPORATION_GID =CustomerID  
SELECT * FROM (
    SELECT
            ROW_NUMBER() OVER(Order by B.ReconciliationNO Desc) IndexID,
B.ReconciliationNO,
B.OrderReleaseNum,
B.Customer,
(select top 1 OrderReleaseTC_GID from OrderReleaseTC Where OrderReleaseNum=B.OrderReleaseNum) as OrderGid,
SUM(B.Amount) Amount,
SUM(B.RemainAmount) RemainAmount,
MIN(B.OrderDate) OrderDate,
MIN(B.InvoiceNo) InvoiceNo,
MIN(B.Pieces) Pieces,
MIN(B.[Weight]) [Weight],
MIN(B.Volume) Volume,
MIN(B.RoadPortDept) RoadPortDept,
MIN(B.RoadPortDest) RoadPortDest,
MIN(B.Re) Re,
case when FeeID='DSK' then '代收货款' else '收入' end FeeClass,
Incomeides=stuff((select ','+cast(A.IncomeIDs as varchar(100)) from @Reconciliation A  
where A.OrderReleaseNum=B.OrderReleaseNum and A.FeeID=B.FeeID
  and isnull(A.Customer,'')=isnull(B.Customer,'') 
      and isnull(A.ReconciliationNO,'')=isnull(B.ReconciliationNO,'') for xml path('')), 1, 1, '')
    FROM @Reconciliation B
    Group by ReconciliationNO,OrderReleaseNum,Customer,FeeID) TB

解决方案 »

  1.   

    关键慢在
    Incomeides=stuff((select ','+cast(A.IncomeIDs as varchar(100)) from @Reconciliation A   
    where A.OrderReleaseNum=B.OrderReleaseNum and A.FeeID=B.FeeID
    and isnull(A.Customer,'')=isnull(B.Customer,'')  
    and isnull(A.ReconciliationNO,'')=isnull(B.ReconciliationNO,'') for xml path('')), 1, 1, '')