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作为答案,如果不愿意,我最终会这样做。