我得到了一个包含内部选择查询的大型查询。我的目标是按字段调用产品编号(不是唯一的,多次出现)然后按日期对所有记录进行分组。
我在查询结束时添加了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)对group by进行分组,然后按日期排序? 在查询中,我添加了按日期排序。当我按ProductNumber添加组时,错误消息要求我将内部选择中的所有字段添加到组中。我真的需要在select to my group中的所有字段(在真实查询中有很多字段)吗?必须有一个更好的解决方案。
到目前为止,这是我的查询(只是一个示例)
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 :(得分:3)
你所谓的“分组”实际上就是订购。
按产品编号订购,日期。
答案 1 :(得分:1)
我认为您的问题是您尝试按分组数据中包含的字段进行排序,并且并非总是相同,例如:
usersConnected
如果您按照1 Kellog H1 05/05/2017
5 Nestle H1 05/01/2017
和分组要按日期排序的分组,很可能您的数据库引擎无法知道要按哪个值排序(5月5日或5月1日?)。因此,您需要做的是指定分组时使用的值,例如使用MAX或MIN函数。
快速样本:
ProductNumber