1

我有下表...

        ID      awaiting    approve decline      
        100       1         0         0     
        100       1         0         0     
        102       1         0         0     
        103       0         1         0     
        104       0         1         0     
        104       1         0         0     
        106       1         0         0     
        107       0         1         0     
        107       1         0         0     
        107       1         0         0

我也有以下代码,...

  SELECT COUNT(*) total
    FROM
    (
    SELECT ID
    FROM table1
    GROUP BY ID
    HAVING COUNT(*) = 2
    AND MAX(awaiting = 1) > 0
    ) q

上面的代码所做的是计算所有重复两次的 ID 和至少一个 ID awaititng=1,

但是现在我想要的是,如果等待是 1,我想显示上面的结果,并列出它们的重复 ID。(如 ID 100)。

从上面的查询中,结果是两 (2) 个 ID 的 100 和 104,因为我们按 ID 分组。

现在,即使 ID 相同(在这种情况下,我们必须有三个行列表),我如何才能显示此 ID 中具有 awaiting=1 的所有结果?

请帮忙....

4

2 回答 2

2

这应该有效:

SELECT *
FROM table1 
WHERE ID IN (SELECT ID
             FROM table1
             GROUP BY ID
             HAVING COUNT(*) = 2
             AND MAX(awaiting) = 1)
AND awaiting = 1

结果是:

╔═════╦══════════╦═════════╦═════════╗
║ ID  ║ AWAITING ║ APPROVE ║ DECLINE ║
╠═════╬══════════╬═════════╬═════════╣
║ 100 ║        1 ║       0 ║       0 ║
║ 100 ║        1 ║       0 ║       0 ║
║ 104 ║        1 ║       0 ║       0 ║
╚═════╩══════════╩═════════╩═════════╝

Ande这里是一个带有演示的 sqlfiddle。

于 2013-08-19T19:35:05.840 回答
1

如果我正确理解了这个问题,你可以得到这样的个别行:

SELECT Table1.ID, Table1.Awaiting, Table1.Approve, Table1.Decline
FROM Table1
INNER JOIN (
  SELECT ID
  FROM table1
  GROUP BY ID
  HAVING COUNT(*) = 2
  AND MAX(awaiting = 1) > 0
) q ON Table1.ID = q.ID

请注意您的原始查询是如何在此处逐字使用的,因为它会返回ID您想要的所有值。将 ID 列表连接回原始表以获取各个行。

于 2013-08-19T19:36:36.690 回答