Sql server 2008 联接select语句并删除重复项
我正在使用一个SQL数据库,其中JobUID、jobcode和UID都应该具有唯一的值。我有一个错误的客户端,它正在创建重复的条目,其中JobUID和jobcode是重复的,但UID仍然是唯一的 我对所有视图运行相同的查询,以便识别重复的视图。至于为什么会有重复项,这是一个单独的问题,但我想加入这些查询,所以我得到一个表作为输出,没有重复项Sql server 2008 联接select语句并删除重复项,sql-server-2008,join,distinct,Sql Server 2008,Join,Distinct,我正在使用一个SQL数据库,其中JobUID、jobcode和UID都应该具有唯一的值。我有一个错误的客户端,它正在创建重复的条目,其中JobUID和jobcode是重复的,但UID仍然是唯一的 我对所有视图运行相同的查询,以便识别重复的视图。至于为什么会有重复项,这是一个单独的问题,但我想加入这些查询,所以我得到一个表作为输出,没有重复项 SELECT r.JobUID, r.jobcode, r.UID, count(1) from [dbo].FieldsView r group by
SELECT r.JobUID, r.jobcode, r.UID, count(1)
from [dbo].FieldsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
order by 2, 3
SELECT r.JobUID, r.jobcode, r.UID, count(1)
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
order by 2, 3
当我将查询更改为此时,我只得到一个受影响的职务代码列表,这就是我想要的:
SELECT Distinct r.jobcode, count(1)
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
SELECT Distinct r.jobcode, count(1)
from [dbo].FieldsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
但现在我想加入这些,再次删除重复项,因为每个表中都存在相同的作业代码,所以我只得到一个表作为输出,没有重复项
SELECT r.JobUID, r.jobcode, r.UID, count(1)
from [dbo].FieldsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
order by 2, 3
SELECT r.JobUID, r.jobcode, r.UID, count(1)
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode, r.UID
having count(1) > 1
order by 2, 3
谢谢
我最终使用的是:
SELECT jobcode, SUM(Amount)
From (
SELECT r.JobUID, r.jobcode, r.UID, count(1) AS Amount
from [dbo].FieldsView r
group by r.JobUID, r.jobcode, r.UID having count(1) > 1
UNION ALL
SELECT r.JobUID, r.jobcode, r.UID, count(1) AS Amount
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode, r.UID having count(1) > 1
) X
GROUP BY jobcode
Having SUM(Amount) > 1
再次感谢 您可以使用UNION获取非重复列表。然后必须将其作为内部查询来处理,以获得正确的计数
SELECT jobcode, COUNT(*)
FROM
(
SELECT Distinct r.jobcode
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode, r.UID
having count(*) > 1
UNION
SELECT Distinct r.jobcode
from [dbo].FieldsView r
group by r.JobUID, r.jobcode, r.UID
having count(*) > 1
) X
GROUP BY jobcode
在我看来,你对细节有点不清楚。 如果JobUID和jobcode的组合在所有视图中都应该是唯一的,那么下面的语句应该可以做到这一点:
SELECT JobUID, Jobcode, SUM(Amount)
FROM
(
SELECT JobUID, Jobcode, COUNT(*) AS Amount
from [dbo].HistoryItemsView r
group by r.JobUID, r.jobcode
UNION ALL
SELECT JobUID, Jobcode, COUNT(*)
from [dbo].FieldsView r
group by r.JobUID, r.jobcode
) X
GROUP BY jobcode
HAVING SUM(Amount) > 1
您真的确定底部的两个查询返回任何结果吗?根据您的问题,r.UID是唯一的,因此不会进行分组,count1将始终为1,因此不会返回任何行。类似的例子:它似乎产生了相同的列表作业代码。最后,我使用了原始查询,并在结果中过滤了作业代码