1

我的 SQL 生锈了,所以我需要帮助,我希望我的解释不会混淆。

我需要一个语句来查找字段 A 的所有重复值,如果其中至少一个行在字段 B 上具有恒定值

字段 A | B场
狗| 犬类
| 空
狗 | 无效的

因为字段 B 是犬类,我想要所有重复字段 A 值的行。我需要一个 select 语句,但我的意图是更改字段 C 上的重复值,但我以后可能会弄清楚。

4

4 回答 4

2

似乎您想要所有行,其中FieldB值不统一为 NULL。

这为您提供了FieldA具有该特征的 s 列表:

select FieldA
from t
group by FieldA
having count(FieldB) > 0;

如果您确实想要具有NULL值的行,则:

select FieldA, FieldB
from (select t.*, count(FieldB) over (partition by FieldA) as cnt
      from t
     ) t
where cnt = 0;

要获取其中一个是犬科动物的所有 FieldA :

select distinct FieldA
from t
where FieldB = 'canine';

要获取所有行,请在where子句中使用它:

select *
from t
where t.FieldA in (select distinct FieldA
                   from t
                   where FieldB = 'canine'
                  );
于 2013-05-24T15:49:40.220 回答
2

count(fielda) > 1获取其中一个fieldb具有值的所有行canine

select t1.fielda
from mytab t1
join (select fielda, count(*) as dups
      from mytab
      group by fielda) t2 on t2.fielda = t1.fielda
where t1.fieldb = 'canine'
and t2.dups > 1

SQLFiddle

于 2013-05-24T16:20:08.120 回答
1

如果您希望每一行都有重复项,并且字段 B 中的至少一项不为空,这将拉取:

SELECT *
FROM Table
WHERE FieldA IN (SELECT DISTINCT FieldA
                 FROM Table
                 WHERE FieldB IS NOT NULL)
   AND FieldA IN (SELECT FieldA
                 FROM Table
                 GROUP BY FieldA
                 HAVING COUNT(*)>1)
于 2013-05-24T16:04:03.017 回答
1

你的帮助让我找到了它。谢谢大家。我正在寻找的是:

SELECT FieldA
FROM t
WHERE FieldB = 'Canines'
AND FieldA 
IN
(
    SELECT FieldA
    FROM t
    GROUP BY FieldA
    HAVING COUNT(FieldA) > 1
)

谢谢!谢谢!

于 2013-05-24T16:16:22.720 回答