2017-07-06 82 views
1

分組依據(名稱)和排序依據(日期)我得到了一種包含內部選擇查詢的大型查詢。我的目標是通過現場調用產品編號(這不是唯一的並且多次出現),然後按日期對所有記錄進行分組。兩個選擇查詢

我在查詢的末尾添加了Order By日期,似乎工作正常。查詢按日期順序生成所有記錄,但記錄未按ProductNumber分組。

這裏是

ProductId Manufacturer  ProductNumber  Date 
1   Kellog    H1   05/05/2017 
5   Nestle    H1   05/01/2017 
8   Nutmeg    H1   04/30/2017 
9   Highland    H3   04/09/2017 
10   Houston    H1   04/15/2017 
11   Miami     H3   04/12/2017 

我試圖讓輸出看起來像下面

ProductId Manufacturer  ProductNumber  Date 
1   Kellog    H1   05/05/2017 
5   Nestle    H1   05/01/2017 
8   Nutmeg    H1   04/30/2017 
10   Houston    H1   04/15/2017 
9   Highland    H3   04/09/2017 
11   Miami     H3   04/12/2017 

因此,數據的可視化樣品,我將如何被列字段組(ProductNumber )與分組,然後按日期排序? 在查詢中,我添加了按日期排序。當我通過ProductNumber添加組時,錯誤消息是要求我將內部選擇中的所有字段添加到組中。我是否真的需要選擇所有的字段(真正的查詢中有很多字段)?必須有更好的解決方案。

這裏是我的查詢(只是一個示例)到目前爲止

SELECT DISTINCT TOP 100 *, 
FROM (SELECT DISTINCT NP.ManufacuturerId, 
         C.ManufacuturerName, 
         IR2.ProductNumber, 
         NP.Field1, 
         NP.Field2, 
         NP.Field3, 
         NP.Field4, 
         CN.C2Date      CN.CompanyNotificationId, 
         NPR.NotificationProcessName, 
         Cast(NP.CompanyId AS VARCHAR(15)) 
         + NPR.NotificationProcessName AS 'CompanyIdAndProcess', 
         CC.UserId, 
         NT.NotificationTypeName, 
         CC.EmailAddress, 
         IsRegistered = CASE 
             WHEN C.IsRegistered = 1 THEN 'Yes' 
             ELSE 'No' 
             END, 
     FROM ProductDetails NP 
       INNER JOIN Manufactuers C 
         ON C.ManufacuturerId = NP.ManufacturerId) Q 
ORDER BY CN.C2DateDESC; 
+0

,會是什麼結果,如果'11邁阿密H3 4月12日/ 2017'日期是'05/05/2017'? –

+0

是不是合乎邏輯,當你按產品編號分組和選擇查詢中的一些其他列應彙總? SQL中有不同的聚集函數,如min,max,Avg等,您可以根據您的要求在選擇查詢中使用它們,也可以按這些列進行分組。 –

回答

3

你什麼叫「分組」真的訂購。

按產品編號,日期排序。

1

我覺得你的問題是,你正試圖通過包括分組數據中的字段順序,並不總是相同的,例如:

1  Kellog   H1   05/05/2017 
5  Nestle   H1   05/01/2017 

如果按ProductNumber您想按日期排序的分組很可能是您的數據庫引擎無法知道訂購(5月5日或5月1日?)的價值。因此,您需要做的是指定分組時使用哪個值,例如使用MAX或MIN函數。

快速樣品:

SELECT Count(*) AS Products, ProductNumber, MAX(Date) AS maxdate 
FROM  Table 
GROUP BY ProductNumber 
ORDER BY maxdate;