我有销售数据。订单获得销售代码,就像订单来自网络聊天一样。我们正在处理涉及销售代表的订单,而不是自动在线订单。
每个这样的订单都会得到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行。
答案 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行,则需要使用不同的解决方案。