Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
Sql server 2008 联接select语句并删除重复项_Sql Server 2008_Join_Distinct - Fatal编程技术网

Sql server 2008 联接select语句并删除重复项

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

我正在使用一个SQL数据库,其中JobUID、jobcode和UID都应该具有唯一的值。我有一个错误的客户端,它正在创建重复的条目,其中JobUID和jobcode是重复的,但UID仍然是唯一的

我对所有视图运行相同的查询,以便识别重复的视图。至于为什么会有重复项,这是一个单独的问题,但我想加入这些查询,所以我得到一个表作为输出,没有重复项

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,因此不会返回任何行。类似的例子:它似乎产生了相同的列表作业代码。最后,我使用了原始查询,并在结果中过滤了作业代码