两个选择查询

时间:2017-07-06 12:38:59

标签: sql sql-server

我得到了一个包含内部选择查询的大型查询。我的目标是按字段调用产品编号(不是唯一的,多次出现)然后按日期对所有记录进行分组。

我在查询结束时添加了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; 

2 个答案:

答案 0 :(得分:3)

你所谓的“分组”实际上就是订购。

按产品编号订购,日期。

答案 1 :(得分:1)

我认为您的问题是您尝试按分组数据中包含的字段进行排序,并且并非总是相同,例如:

usersConnected

如果您按照1 Kellog H1 05/05/2017 5 Nestle H1 05/01/2017 分组要按日期排序的分组,很可能您的数据库引擎无法知道要按哪个值排序(5月5日或5月1日?)。因此,您需要做的是指定分组时使用的值,例如使用MAX或MIN函数。

快速样本:

ProductNumber