sql - 从查询中删除重复行和“无法绑定多部分标识符”错误
问题描述
这是我的查询,它在 Column3 中产生重复值。
Select
D.ID,
E.Date,
D.Column3,
E.Column4,
D.Column5,
E.Column6,
From [TABLE_E] As E
Join [TABLE_D] as D ON E.Column3 = D.Column3
WHERE D.Column5 IN ('Value1', 'Value2')
Order by DATE desc
当使用一条信息更新 Table_D 时,它将在 Column3 和大多数其他列中创建具有相同值的两行。为了这个查询,我只想在 Column3 中的每个值显示一行,它来自哪一个或哪个表(D 或 E)并不重要。
我已经尝试过 DISTINCT Column3,它不起作用,但仍然带来完全相同数量的行,并且使用 GROUP BY 给我以下错误消息 'Column'D.ID' 在选择列表中无效,因为它不包含在任何一个中聚合函数或 GROUP BY 子句。
因此,在搜索了一段时间后,我发现了一个链接,建议有人在他们的查询中使用“ROW_NUMBER()、OVER、PARTITION BY 和 SEQNUM”函数(我以前从未使用过)。我试图将其改编为我的:
Select
D.ID,
E.Date,
D.Column3,
E.Column4,
D.Column5,
E.Column6,
FROM [TABLE_E] As E
LEFT JOIN (SELECT D.*, ROW_NUMBER() OVER (PARTITION BY E.Column3 order by E.Date DESC) as SEQNUM
FROM [TABLE_D] as D) D ON E.Column3 = D.Column3 and
SEQNUM = 1
WHERE D.Column5 IN ('Value1', 'Value2')
GROUP BY E.Column3
ORDER BY E.DATE desc
现在我收到“无法绑定多部分标识符“E.DATE”。” 作为错误消息(在与左连接的行上)。然后,我针对此错误进行了一些搜索以寻求帮助,但给出的任何答案似乎都与我的代码无关,我无法让它们工作。
如果有任何方法可以从我的第一个查询中删除重复的行,我将不胜感激。但是,如果有办法解决我在第二个查询中收到的错误,那也很好,然后我可以查看是否删除了重复项。
解决方案
试试这样:
with DistinctD as (
select max(id) as maxId, Column3 from TABLE_D
WHERE Column5 IN ('Value1', 'Value2')
group by Column3
),
DistinctE as (
select rn = ROW_NUMBER () OVER (partition by column3 order by date), *
from TABLE_E
)
Select
D.ID,
E.Date,
D.Column3,
E.Column4,
D.Column5,
E.Column6
From DistinctE As E
Join TABLE_D as D ON E.Column3 = D.Column3
where d.id in (select maxId from DistinctD)
and e.rn = 1
Order by DATE desc;
推荐阅读
- python - Spark 3.0.0 创建 SparkSession 时出错:pyspark.sql.utils.IllegalArgumentException:
- javascript - 实现一个 Vue.js 组件,以便将元素定义为
- cassandra - Cassandra 3.11,按列表过滤结果(搜索替代品)
- postgresql - PostgreSQL - dblink_exec statement_timeout
- c# - Xamarin Forms 嵌套 flex 布局与其他控件无法正确呈现
- javascript - 如何将放置在reactjs中的json对象内的图像发布到spring boot后端rest api
- python - 使用 scikit learn 在 python 中进行管道和交叉验证
- .net - 如何自动启动使用 Msix 打包的应用程序?
- key-value - etcd 是否将其 key-value 数据直接存储在 Raft 日志中?
- c# - c#脚本Roslyn会话不接受参考