SQL选择具有特定值的重复行

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

关于mysql - SQL选择具有特定值的重复行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54660833/

10-11 17:29