优先使用特定数据源中的数据

时间:2015-07-06 14:50:41

标签: sql-server select sql-order-by

我的数据如下

  ID     Name     Description                DataSource     Year
   1     Apple    Sweet & Tasty               Source_A       2016
   1     Apple    Red and Sweet & Tasty       Source_B       2015
   2     Apple    Delicious                   Source_A       2016
   2     Apple    Delicious and Red           Source_C       2015
   3     Apple                                Source_C       2013      
   3     Apple     Green and Large            Source_B       2016

在我的情况下,我想优先考虑source_B,因为它更可靠。因此,如果有来自Soure_B的数据,我想为特定ID显示该行并忽略其他ID。如果source_B中的数据不存在,那么我只想显示来自其他来源的数据。另外,我想只显示一行最新数据。

在上面的示例中,结果应该类似于

   ID     Name     Description                DataSource    Year
   1     Apple    Red and Sweet & Tasty       Source_B      2015
   2     Apple    Delicious                   Source_A      2016
   3     Apple    Green and Large             Source_B      2016

2 个答案:

答案 0 :(得分:2)

您可以使用row_number + case来执行优先级,如下所示:

select 
  id,
  name,
  description,
  datasource,
  year
from (
  select
    id,
    name,
    description,
    datasource,
    year,
    row_number () over (
      partition by ID
      order by case when DataSource = 'Source_B' then 1 else 2 end,
      Year desc
    ) as RN
  from
    table1
) X
where
  RN = 1

分区依据将为每个ID选择新的ID,并按顺序选择行将获得的数量。然后,外部选择过滤掉除编号为1的行以外的其他行。

您可以在SQL Fiddle

中尝试此操作

答案 1 :(得分:1)

使用自定义row_number()的{​​{1}}:

order by