Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 幂查询中不等式的连接_Excel_Join_Powerquery - Fatal编程技术网

Excel 幂查询中不等式的连接

Excel 幂查询中不等式的连接,excel,join,powerquery,Excel,Join,Powerquery,我一直在试图回答 使用以下数据 +---------+---------+-----------+---------+ | Column1 | Column2 | Column3 | Column4 | +---------+---------+-----------+---------+ | 1 | happy | 1-veggies | GHF | | 1 | sad | 1-veggies | HGF | | 2 | an

我一直在试图回答

使用以下数据

+---------+---------+-----------+---------+
| Column1 | Column2 |  Column3  | Column4 |
+---------+---------+-----------+---------+
|       1 | happy   | 1-veggies | GHF     |
|       1 | sad     | 1-veggies | HGF     |
|       2 | angry   | 1-veggies | GHG     |
|       2 | sad     | 1-veggies | FGH     |
|       3 | sad     | 1-veggies | HGF     |
|       4 | moody   | 2-meat    | FFF     |
|       4 | sad     | 2-meat    | HGF     |
|       5 | excited | 2-meat    | HGF     |
+---------+---------+-----------+---------+
OP询问有多少记录与“sad”和“1-veggies”匹配,并且第1列中有另一个记录的值相同,第4列中有GHF或FGH代码。前两行符合条件,但第四行不符合条件,因为如果我理解正确,它有正确的代码,但与匹配“sad”和“1-veggies”的记录在同一条记录中。计数应该是一

我认为,如果这是一个SQL问题,那么答案应该是相当标准的——您可以使用第一列上的等式和行号上的不等式进行自连接。在SQL中,它看起来像这样:

create table Veggies
(
  num integer,
  emotion varchar(10),
  food varchar(10),
  code varchar(10),
  seq integer
  )
  

    insert into Veggies
    values 
    (1,'happy','1-veggies','GHF',1),
    (1,'sad','1-veggies','HGF',2),
    (2, 'angry' ,'1-veggies'    ,'GHG',3),
    (2, 'sad',  '1-veggies',    'FGH',4),
    (3, 'sad',  '1-veggies',    'HGF',5),
    (4, 'moody',    '2-meat',   'FFF',6),
    (4, 'sad',  '2-meat',   'HGF',7),
    (5, 'excited',  '2-meat',   'HGF',8)
    
    with t1 (num,seq)
    as
    (
    select num,seq
    
    from veggies
      
      where emotion='sad' and food='1-veggies'
      ),
      
    t2 (num,seq)
    as
    (
    select num,seq
    
    from veggies
      
    where code='GHF' or code='FGH'
      )
      
      select *
      
      from t1 inner join t2 on t1.num=t2.num and t1.seq<>t2.seq
我认为在Power Query中,在第一列相等但行号不相等的情况下进行连接也是可能的,但我已经完成了使用行号获取两个查询的步骤,我被困在这里:


我看不到任何表达不平等的方式,文档似乎也没有帮助。有人知道如何做到这一点吗?

因此,尽管看起来您无法将问题中的SQL直接转换为Power Query并在一个步骤中复制它

select *
      
from t1 inner join t2 on t1.num=t2.num and t1.seq<>t2.seq
您可以按照@Ron Rosenfeld的建议将其分为两个步骤

综上所述,最初的步骤(希望相当简单)是:

建立与表1所示数据的连接 添加索引列 复制该表并将其命名为表2 按“sad”和“1-蔬菜”筛选表1 按“GHF”或“FGH”筛选表2 现在使用第1列上的内部联接将表2联接到表1:

并使用索引列上的左反联接排除表1中的行:

这将根据需要保留一行


我赞扬你。这个问题我读了很多遍,但还是不明白他想做什么。谢谢@Ron!我想这就是他们的意思——希望在Power Query中如何做到这一点的问题值得一问。我仍然不明白。但是在PQ-LeftOuter和LeftAnti中进行两次连接会产生你认为应该得到的结果吗?这听起来是一个非常好的主意。从逻辑上讲,将其限制为列1在两个表中匹配的行,然后进一步将其限制为列数不匹配的行,应该与一次性执行t1.column1=t2.column1和t1.indext2.index相同。内部连接然后左反似乎起作用-如果您愿意,请使用plz post作为答案,如果不愿意,我最终会这样做。