【发布时间】:2023-03-17 09:33:01
【问题描述】:
我有如下 SQL 测试表:
| Item | Doc_No | Code | Line_Item |
|---|---|---|---|
| 1 | abc1234 | 101 | 01 |
| 2 | abc1234 | 102 | 01 |
| 3 | def5678 | 101 | 01 |
| 4 | def5678 | 102 | 01 |
| 5 | ghi1234 | 101 | 01 |
| 6 | ghi1234 | 101 | 02 |
| 7 | jkl5678 | 101 | 01 |
当 “Doc_No” 的重复值在 “代码” 列中具有“101”和“102”对值时,我正在尝试消除行,例如 abc1234 和 def5678 .
同时我想保持 "Doc_No" 的重复值,而 "Code" 列中没有 "101" 和 "102" 的对值,例如吉1234。最终输出如下:
| Item | Doc_No | Code | Line_item |
|---|---|---|---|
| 5 | ghi1234 | 101 | 01 |
| 6 | ghi1234 | 101 | 02 |
| 7 | jkl5678 | 101 | 01 |
我试图获取具有重复值的行并排除它们,但这会错误地排除“ghi1234”而不是我想要的最终输出表。
SELECT
a.*,
b.Count_Item
FROM dbo.test AS a
LEFT JOIN
(SELECT Doc_No, COUNT(*) AS Count_Item
FROM dbo.test
GROUP BY Doc_No
HAVING COUNT(*) > 1) AS b
ON a.Doc_No = b.Doc_No
WHERE b.Count_Item < 2
| Item | Doc_No | Code | Line_Item | Count_Item |
|---|---|---|---|---|
| 7 | jkl5678 | 101 | 01 | 1 |
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您对下面的查询有何看法?
select doc_no from test group by doc_no having count(distinct code) > 1;
标签: sql duplicates