需要根据条件过滤数据

时间:2015-05-18 23:08:36

标签: sql crystal-reports-2010

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

每个这样的订单都会得到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

所以这很好,我在水晶报告中遇到的问题是输入第3个代码。该应用程序没有停止。但是当我们有第3行时

12345     05/18/15   140000    100.00        BCQ

所以第三排就是扔掉我的CR总数。

我需要创建一个关于此数据的视图,它将返回所有001,然后只返回非001代码的第一个,这意味着根据较低的日期/时间。请注意,完全有可能存在各种日期,但我们只想要更早的日期。

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

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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语句,只按日期和时间排序,就像这样,这将返回每个前两行订单,按日期和时间:

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行,并且您想要返回所有001行,则需要使用不同的解决方案。