我有下表...
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分组。
现在,我怎么能显示这个等待= 1的ID的所有结果,即使ID是相同的(在这种情况下我们必须有三个行列表)?
请帮助....
答案 0 :(得分: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 here is一个带演示的方形小说。
答案 1 :(得分: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列表将连接回原始表以获取各行。