好的,所以考虑到下面数据库的集群软糖(SQL Server 2005),我需要做以下几点:
dbo.users
id | empid
=============
1 | 1234
2 | 2345
3 | 3456
4 | 4567 (Missing log table)
5 | 5678 (Missing temp table)
6 | 1234 (Duplicate empid)
7 | 2345 (Duplicate empid)
8 | 6789 (The Mother Load Missing from oldLog and duplicate empid)
9 | 6789
10 | 1111 (The Mother Load Missing from oldLog and duplicate empid)
11 | 1111
dbo.temp
empid | amount
========================
1234 (id 1) | 200
2345 (id 7) | 200
3456 (id 3) | 100
4567 (id 4) | 100
6789 (id 8) | 200
1111 (id 11) | 100
dbo.oldLog
id
==
1
3
7
dbo.firstCriteria
id | task | status
===========================
1 | task1 | completed
1 | task2 | completed
1 | task3 | completed
2 | task1 | completed
3 | task1 | completed
8 | task1 | completed
8 | task2 | completed
8 | task3 | completed
dbo.secondCriteria
id | status
==============
1 | completed
7 | completed
3 | completed
11 | completed
dbo.newLog
BLANK
我的结果如下:
id | empid
=============
1 | 1234
7 | 2345
3 | 3456
4 | 4567
8 | 6789
11 | 1111
这就是我的尝试并被卡住了:
SELECT users.id
FROM TEMP
JOIN users
ON users.empid = TEMP.empid
WHERE users.empid NOT IN (SELECT users.empid
FROM users
GROUP BY users.empid
HAVING COUNT(users.empid) > 1)
UNION ALL
SELECT users.id
FROM TEMP
JOIN users
ON users.empid = TEMP.empid
WHERE users.empid IN (SELECT users.empid
FROM users
GROUP BY users.empid
HAVING COUNT(users.empid) > 1)
AND users.id IN (SELECT oldlog.id
FROM oldlog)
UNION ALL
--????
答案 0 :(得分:0)
这是你在UNION ALL之后的查询
SELECT users.id
FROM TEMP
JOIN users
ON users.empid = TEMP.empid
WHERE users.empid IN (SELECT users.empid
FROM users
GROUP BY users.empid
HAVING COUNT(users.empid) > 1)
AND users.id NOT IN (SELECT oldlog.id FROM oldlog)
AND 1 = CASE TEMP.amount
WHEN 200 THEN
SELECT 1 FROM dbo.firstCriteria WHERE id = TEMP.id AND status = 'completed' AND COUNT(*) >= 3
WHEN 100 THEN
SELECT 1 FROM dbo.secondCriteria WHERE id = TEMP.id AND status = 'completed'
END