簡體   English   中英

MS Access Union,排序依據弄亂了我的查詢順序

[英]MS Access Union, Order By mess up my query order

SQL:

SELECT 
    SUM(dbo_SO_SalesHistory.DollarsSold) AS SumDollarsSold,  
    "PHOA" As CustomerNo
FROM  
    dbo_SO_SalesHistory
WHERE 
    ((dbo_SO_SalesHistory.[CustomerNo]) IN ("PHOM","PHOB", "PHOA", "HOMP")) 
    AND ((dbo_SO_SalesHistory.InvoiceDate) BETWEEN [BeginDate] AND [EndDate])

UNION

SELECT TOP 9 
    SUM(DollarsSold), CustomerNo 
FROM 
    dbo_SO_SalesHistory
WHERE 
    ((dbo_SO_SalesHistory.CustomerNo) NOT IN ("PHOM","PHOB", "PHOA", "HOMP")) 
    AND ((dbo_SO_SalesHistory.InvoiceDate) BETWEEN [BeginDate] AND [EndDate])
GROUP BY 
    dbo_SO_SalesHistory.CustomerNo 
ORDER BY 
    1 DESC;

當我分別運行兩個查詢時,查詢的第二部分將返回我期望的輸出:

正確

但是當我將它與UNION一起運行時,順序卻以某種方式混淆了:

錯誤

在代碼ORDER BY 1 DESC1表示第一列,即總和。

我努力了

ORDER BY SUM(dbo_SO_SalesHistory.DollarsSold) DESC;

而是返回一個錯誤:

錯誤 3

任何建議將不勝感激!

更新 :這是當前查詢輸出:

[ 在此處輸入圖片說明 ]

所需的輸出如下所示:

在此處輸入圖片說明

(我從圖片1中剪切並粘貼了2〜10行)。 希望這對您的理解有所幫助!

我當前的查詢:

Sum of Dollar | Customer
--------------+----------
     10       |    A   
      8       |    B
      1       |    Q

所需的查詢輸出

14 | B_Total
10 | A
 5 | C

B_Total(14)是X(4),Y(3),Z(2)和B(5)的總和

更新:當前查詢

SELECT 
    SumDollarsSold, CustomerNo, MyOrder 
FROM 
    (SELECT 
         SUM(dbo_SO_SalesHistory.DollarsSold) AS SumDollarsSold, 
         "PHOALLE" AS CustomerNo, 1 AS MyOrder
     FROM 
         dbo_SO_SalesHistory
     WHERE 
         ((dbo_SO_SalesHistory.[CustomerNo]) IN ("PHOMIN","PHOALLE","PHOBROO","PHOMP"))  
         AND ((dbo_SO_SalesHistory.InvoiceDate) Between [BeginDate] And [EndDate])
     UNION
     SELECT TOP 9 
         SUM(DollarsSold), CustomerNo, 2 as MyOrder 
     FROM 
         dbo_SO_SalesHistory
     WHERE 
         ((dbo_SO_SalesHistory.CustomerNo) NOT IN ("PHOM","PHOA","PHOB","PHOM")) 
         AND ((dbo_SO_SalesHistory.InvoiceDate) Between [BeginDate] And [EndDate])
     GROUP BY 
         dbo_SO_SalesHistory.CustomerNo
     ORDER BY 
         1 DESC
) a 
ORDER BY 
    MyOrder, SumDollarsSold DESC;

當您使用UNION時,無法保證任何訂單,因此您將丟失在第二個查詢中已經完成的ORDER BY。 您可以添加另一個字段,以確保第一條記錄始終位於最前面,但是您確實需要將其包括在所選字段中。 像這樣:

SELECT 
    SumDollarsSold, CustomerNo, MyOrder 
FROM 
    (SELECT 
         SUM(dbo_SO_SalesHistory.DollarsSold) AS SumDollarsSold, 
         "PHOA" AS CustomerNo, 1 AS MyOrder
     FROM 
         dbo_SO_SalesHistory
     WHERE 
         ((dbo_SO_SalesHistory.[CustomerNo]) IN ("PHOM","PHOB", "PHOA", "PHOM"))  
         AND ((dbo_SO_SalesHistory.InvoiceDate) Between [BeginDate] And [EndDate])
     UNION
     (SELECT TOP 9 
         SUM(DollarsSold), CustomerNo, 2 as MyOrder 
     FROM 
         dbo_SO_SalesHistory
     WHERE 
         ((dbo_SO_SalesHistory.CustomerNo) NOT IN ("PHOM","PHOB", "PHOA", "PHOM")) 
         AND ((dbo_SO_SalesHistory.InvoiceDate) Between [BeginDate] And [EndDate])
     GROUP BY 
         dbo_SO_SalesHistory.CustomerNo
     ORDER BY 
         SUM(DollarsSold) DESC)
) a 
ORDER BY 
    MyOrder, SumDollarsSold DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM