【问题标题】:Vlookup Value From A Range of Values从一系列值中查找值
【发布时间】:2019-01-08 00:27:37
【问题描述】:

我正在尝试在一系列行(表 2)中查找一个值(表 1 中的 rdate),如果可以在表 2 中找到该值(使用一组特定的条件),则返回“是”

表 1 - 按日期划分的销售额

rdate           strcompanynodename          Sum of MnyDollar Cost         
    --------------------------------------------------------------
7/15/2017         Chadwick Supply Co.                5100
8/1/2017          Northeastern Milling               5600
6/3/2017          Ford Paper                         25320
12/1/2017         Northeastern Milling               6600
1/11/2010         Chadwick Supply Co.                300
7/4/2017          Ford Paper                         2

表 2 - 受影响的日期

rdate start         rdate end                 strcompanynodename  
    --------------------------------------------------------------
7/1/2017          7/31/2018                   Chadwick Supply Co.   
7/2/2017          8/2/2018                    Northeastern Milling 
2/1/2016          3/31/2016                   Chadwick Supply Co.   
7/3/2017          8/3/2018                    Ford Paper    
3/2/2012         8/2/2013                    Northeastern Milling  

当 strcompanynodename 与表 2 中的值匹配并且表 1 中的 rdate 介于表 2 中的 rdate start 和 rdate end 之间(当公司匹配时)时,我想通过表 1 中的 strcompany 名称对 mnydollar 成本求和。

更新为预期结果

strcompanynodename          match? (between dates)                sum of mnydollarcost
--------------------------------------------------------------
Chadwick Supply Co.            yes                             5100
Northeastern Milling           yes                             5600
Ford                           yes                             2
Chadwick Supply Co.            no                              300
Northeastern Milling           no                              6600
Ford                           no                              25320 

【问题讨论】:

  • 你试过了吗?
  • 我看到了一个问题。 “Northeastern Milling”在表 1 中有两个日期。您如何尝试聚合两个不同日期的美元值。表 2 类似。请进一步澄清你的逻辑,并解释你到目前为止都尝试了什么。
  • @RhythemAggarwal 我想将表 1 中多个日期的所有 Northeastern 铣削销售额相加,仅当表 1 中的日期与表 2 中的 Northeastern Milling 行匹配且位于开始和结束范围内时才对给定行求和日期。
  • @James:你能展示预期的结果吗?
  • @James 例如,在你的例子中,Northeastern Milling 的销售额应该是 5600,因为表 1 中只有一个日期在表 2 的日期范围内?

标签: sql domo


【解决方案1】:

您应该能够使用以下查询获得预期结果

select distinct t1.strcompanynodename , t1.dollar, case when t1.rdate between t2.start and t2.end then "Yes" else "No" end as flag from
table1 as t1 left outer join table2 as t2
on t1.strcompanynodename = t2.strcompanynodename
order by flag

说明: case 语句用于创建是或否标志。 这里的关键是使用 LEFT OUTER JOIN(在 google 上阅读有关联接的信息)。并且为了避免重复记录,我添加了一个 distinct 可以删除由于表 2 中的多个条目而导致的重复记录,因为表 1 是源

【讨论】:

  • 太棒了!我会试试这个。我实际上在这里使用 Domo,所以我希望 SQL 到 Domo 的转换能够顺利进行。
  • 我不确定 Domo 是什么。我会做一些研究,看看我是否可以快速制作一个兼容 Domo 的解决方案。
  • Domo 是一个 BI 工具,它允许用户使用一种 SQL 形式来创建自定义度量。
  • 谢谢。我今天给它看看。此外,我发现解决方案存在逻辑缺陷。对于查德威克,对于 5100 美元的销售额,有两个标志。是和否都对应于表 2 中的两个不同日期。理想情况下,我认为根据您的解释,这是应该的,因为美元价值存在于一组受影响的日期范围而不是其他日期范围。您可能希望更清楚地为案例选择受影响的日期范围。
【解决方案2】:

你可以试试这个:

    SELECT T1.strcompanynodename, T1.Mydollar, t1.rdate, t2.rdatestart, t2.rdateEnd,
case when t1.rdate between t2.rDateStart and t2.rdateEnd then 'Yes' 
Else 'No' end AS Flag
FROM SalesbyDate as T1
LEFT  JOIN ImpactedDates as T2 ON T1.strcompanynodename = T2.strcompanynodename 
AND T1.rDate BETWEEN T2.rDateStart AND T2.rDateEnd
Order by Flag desc

【讨论】:

  • 这不会夸大 $ 价值吗?
  • 8/1/2017 Northeastern Milling 5600 此行将与表 2 中的两行相连接,使得 2017 年 8 月 1 日东北人 11200 的总销售额在逻辑上似乎不正确。
  • @RhythemAggarwal:哦,不,我的朋友 :))
  • @RhythemAggarwal 这是我遇到的一个问题。不知道如何对表 1 中的每个值求和一次。
  • @Tomato32 我可能弄错了。对不起。但是,您在 strcompanynodename 上加入了表格,那么表 1 中东北铣削的每一行将与表 2 中的 2 行连接。我的理解不正确吗?我也会很快在我的电脑上试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2014-09-04
相关资源
最近更新 更多