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