无效的sql Group By Query

时间:2015-03-10 15:48:12

标签: sql sql-server sql-server-2008

我有以下数据的两个表:

表1(MOF_Check_Vendor

id  ApprovalCycel_ID    FPM_Vendor_ID   BankAccount_ID
------------------------------------------------------
13  23                       197          11
14  24                       198          6
22  25                       198          6

表2(ApprovalCycel

ApprovalCycel_ID    Currency_id fpm_vendor_id   Invoice_Number
--------------------------------------------------------------
23                       133    197              INV02
24                       133    198              INV03
25                       133    198              BOInvoice

我使用此查询来获得想要的结果:

SELECT 
   FPM_Vendor_ID,
   STUFF(
          (SELECT 
              'Invoice_Number' + char(9) + 
              'InvoiceCurrency' + char(9) + 
              'Amount' + char(13) + char(10) +
              CONVERT(NVARCHAR(max), ap.Invoice_Number) + char(9) +
              CUR + char(9) +
              CONVERT(NVARCHAR(max), ap.Ammount) + char(13) + char(10)
           FROM 
              dbo.ApprovalCycel ap
           JOIN 
              dbo.Country ON ap.Currency_id = dbo.Country.Country_ID
           LEFT JOIN 
              dbo.MOF_Check_Vendor mv ON ap.ApprovalCycel_ID = mv.ApprovalCycel_ID
           WHERE 
              mv.ID IN (13,14,22)
           GROUP BY 
              PR_Request_Supplier_ID, Invoice_Number, CUR, Amount
           FOR XML PATH('')), 1, 0, '') AS GComment
FROM 
   dbo.ApprovalCycel 
LEFT JOIN 
   dbo.MOF_Check_Vendor ON dbo.ApprovalCycel.ApprovalCycel_ID = dbo.MOF_Check_Vendor.ApprovalCycel_ID
WHERE 
   ID IN (13, 14, 22)
GROUP BY 
   FPM_Vendor_ID, BankAccount_ID

结果返回如下:

FPM_Vendor_ID    GComment
------------------------------------------------------------
    197          Invoice_Number InvoiceCurrency Amout
 INV02 QAR 500.00
 Invoice_Number InvoiceCurrency Amout
 BOInvoice QAR 1000.00
 Invoice_Number InvoiceCurrency Amout
 INV03 QAR 1000.00
 
    198          Invoice_Number InvoiceCurrency Amout
 INV02 QAR 500.00
 Invoice_Number InvoiceCurrency Amout
 BOInvoice QAR 1000.00
 Invoice_Number InvoiceCurrency Amout
 INV03 QAR 1000.00
 

但它应该是:

FPM_Vendor_ID   GComment
-------------------------------------------------------------------
    197         Invoice_Number InvoiceCurrency Amout
 INV02 QAR        500.00
 
    198         Invoice_Number InvoiceCurrency Amout
 BOInvoice QAR 1000.00
 Invoice_Number InvoiceCurrency Amout
 INV03 QAR 1000.00
 

我需要的结果如下:

FPM_Vendor_ID   GComment
------------------------------------------------------------
   197          Invoice_Number InvoiceCurrency Amout
 INV02 QAR 500.00
  
   198          Invoice_Number InvoiceCurrency Amout
 BOInvoice QAR 1000.00
 Invoice_Number InvoiceCurrency Amout
 INV03 QAR 1000.00
 

1 个答案:

答案 0 :(得分:0)

感谢所有人,但我已经解决了这个问题 通过更改查询如下:

SELECT FPM_Vendor_ID,
       STUFF(
               (SELECT 'Invoice_Number' + char(9) + 'InvoiceCurrency' + char(9) + 
                'Amount' + char(13) + char(10) + CONVERT(NVARCHAR(MAX), 
                ap.Invoice_Number) + char(9) + CUR + char(9) + 
                CONVERT(NVARCHAR(MAX), ap.Ammount) + char(13) + char(10)
                FROM dbo.ApprovalCycel ap
                JOIN dbo.Country ON ap.Currency_id = dbo.Country.Country_ID
                LEFT JOIN dbo.MOF_Check_Vendor mv ON ap.ApprovalCycel_ID = mv.ApprovalCycel_ID
                WHERE mv.FPM_Vendor_ID = MOF_Check_Vendor.FPM_Vendor_ID
                GROUP BY PR_Request_Supplier_ID, Invoice_Number, CUR, Amount
                FOR XML PATH('')), 1, 0, '') AS GComment
FROM dbo.ApprovalCycel
LEFT JOIN dbo.MOF_Check_Vendor ON dbo.ApprovalCycel.ApprovalCycel_ID = dbo.MOF_Check_Vendor.ApprovalCycel_ID
WHERE ID IN (13,14,22)
GROUP BY FPM_Vendor_ID, BankAccount_ID