mysql - SQL 选择具有特定值的重复行
问题描述
我有一个包含产品数据的表(JobLog)。我希望能够检查某些字段是否可能已重新提交并输入了两次,但之前可能已被处理过。
我的代码如下:
SELECT A.ProductName, A.ProductCode, A.AmtHeld, A.Disposition
FROM
JobLog AS A
INNER JOIN (
SELECT ProductCode, AmtHeld
FROM JobLog GROUP BY ProductCode, AmtHeld
HAVING COUNT(*) > 1
) AS B
ON (A.ProductCode = B.ProductCode)
AND (A.AmtHeld = B.AmtHeld)
它输出:
|ProductName | AmtHeld | ProductCode | Disposition|
|------------|---------|-------------|------------|
| chocolate | 123 | 500 | P |
|------------|---------|-------------|------------|
| chocolate | 123 | 500 | C |
|------------|---------|-------------|------------|
| vanilla | 355 | A30 | C |
|------------|---------|-------------|------------|
| vanilla | 355 | A30 | C |
|------------|---------|-------------|------------|
有没有办法有一个额外的参数,它只会输出具有 Disposition = P 作为行的一部分的行?如,我只想要两种巧克力产品的输出,因为其中一种具有 P 的性格,而不是两种香草,因为它们都具有 C 的性格(没有 P)。
|ProductName | AmtHeld | ProductCode | Disposition|
|------------|---------|-------------|------------|
| chocolate | 123 | 500 | P |
|------------|---------|-------------|------------|
| chocolate | 123 | 500 | C |
|------------|---------|-------------|------------|
提前致谢!
解决方案
您可以将条件放在HAVING
子句中:
SELECT A.ProductName, A.ProductCode, A.AmtHeld, A.Disposition
FROM JobLog AS A INNER JOIN
(SELECT ProductCode, AmtHeld
FROM JobLog
GROUP BY ProductCode, AmtHeld
HAVING COUNT(*) > 1 AND
SUM(IIF(DISPOSITION = 'P', 1, 0)) > 0
) AS B
ON A.ProductCode = B.ProductCode AND
A.AmtHeld = B.AmtHeld
推荐阅读
- javascript - 使用 CodeceptJs 关闭当前选项卡时会话 ID 无效
- python - 如何加载waymo场景数据?
- c# - 实体框架 - 查询只返回一个结果
- json - 如何在 Jmeter 中执行 ForEach 循环 100 次?
- python - Pandas Data Frame - 将前一列中与特定条件匹配的所有值相加并将其添加到新列中
- python - 如何在 SQL LIKE 中传递动态值?
- parsing - 如何在我的词法分析器/解析器中支持不同的语言版本
- java - 如何通过 Intent 初始化 Android DatePicker?
- git - 变基后丢失的更改,如何安全地将更改从本地主机推送到远程/源主机
- node.js - 如何将node应用程序打包成windows exe应用程序