需要按条件过滤数据

Need to filter data on condition

我有销售数据。订单获得销售代码,就像订单来自网络聊天一样。我们正在处理有销售代表参与的订单,而不是自动在线订单。

每个这样的订单都会得到一个代码001。然后也会得到例如 'BCS'

所以我们会有数据

order#   Ord.date  ord.time  Amt etc.  sales code

12345     05/18/15  090000    100.00       001
12345     05/18/15  100000    100.00        BCS

所以没关系,我在 crystal 报告中遇到的问题是输入第三个代码时。该应用程序没有停止。但是当我们有第三行时

12345     05/18/15   140000    100.00        BCQ

因此第 3 行不符合我的 CR 总数。

我需要创建一个关于此数据的视图,该视图将 return 所有 001,然后只有第一个非 001 代码,意思是根据较低的 date/time。请注意,完全有可能有不同的日期,但我们只想要较早的日期。

我不确定如何在 SQL 查询中创建这样的条件。所以在我们的示例中,我们需要 001 行和 BCS,因为时间和日期早于第 3 行。

尝试这样的事情:

Select * from 
(
    Select *
    , row_number() over (partition by [OrderNo]
                       order by case SalesCode when '001' then 1 else 2 end
                       , Ord.Date, Ord.Time
                       )
                    as RowN
    from MyTable
) a
where a.RowN in (1,2)

如果带有 SalesCode 001 的行始终是为订单创建的第一行,那么您可以跳过 case 语句,只按日期和时间排序,这样 return每个订单的前两行,按日期和时间:

Select * from 
(
    Select *
    , row_number() over (partition by [OrderNo]
                       order by Ord.Date, Ord.Time
                       )
                    as RowN
    from MyTable
) a
where a.RowN in (1,2) 

请注意,这两者都假设每个订单只有一个 001 行。如果它们可以有多个 001 行后跟一个非 001 行,并且您想要 return 所有 001 行,则需要不同的解决方案。