我正在使用SQL数据库,其中JobUID,jobcode和UID都应具有唯一值。我有一个错误的客户端正在创建重复的条目,其中JobUID和作业代码是重复的,但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
但是现在我想加入这些,再次删除重复项,因为每个表中都存在相同的作业代码,所以我只得到1个表作为输出,没有重复。
由于
我最终使用的是:
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
再次感谢!
答案 0 :(得分:0)
您可以使用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
答案 1 :(得分:0)
IMO你对细节有点不清楚。 如果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