表1:
ID Year MatchNumber
0 0 0
1 2017 1
2 2017 2
3 2017 3
4 2017 4
5 2016 1
6 2016 2
7 2016 3
8 2016 4
9 2015 1
10 2015 2
11 2015 3
12 2015 4
13 2017 5
表2:
Year MatchNumber
2017 1
2017 2
2017 3
2017 4
2016 1
2016 2
2016 3
2016 4
2015 1
2015 2
2015 3
2015 4
预期输出:根据情况而定 案例1:
如果Id为0则为0;
案例2如果Id <> 0
和yeat和matchnumber匹配那么1
其他2
ID Year MatchNumber conditionMatched
0 0 0 0
1 2017 1 1
2 2017 2 1
3 2017 3 1
4 2017 4 1
5 2016 1 1
6 2016 2 1
7 2016 3 1
8 2016 4 1
9 2015 1 1
10 2015 2 1
11 2015 3 1
12 2015 4 1
13 2017 5 2
我还有一个要包含在连接中的表类别。 Categoryid CategoryName 0 X. 1 Y. 2 Z 而是基于硬代码0,1,2进行标记;我需要加入类别表标记其值..
答案 0 :(得分:1)
你有不同的情况? 所以使用CASE语句:)
SELECT ID,
T1.[Year],
T1.MatchNumber,
CASE WHEN ID=0 THEN 0
WHEN T2.[year] IS NOT NULL THEN 1
WHEN T2.[year] IS NULL THEN 2
END AS conditionMatched
FROM Table1 AS T1
LEFT JOIN Table2 AS T2
ON T1.[year]=T2.[year] AND T1.MatchNumber=T2.MatchNumber
ORDER BY ID;
答案 1 :(得分:0)
另一种方法(自SQL Server 2012起可以使用IIF,自SQL Server 2008起可以使用COALESCE):
SELECT t.ID,
t.[Year],
t.MatchNumber,
IIF(t.ID>0,2,0)-COALESCE(p.MatchNumber-t.MatchNumber+1,0)
FROM Table1 t
LEFT JOIN Table2 p
ON t.[year] = p.[year]
AND t.MatchNumber = p.MatchNumber
ORDER BY t.ID
答案 2 :(得分:0)
SELECT [Value] = CASE WHEN EXISTS (SELECT 1 FROM Table2 t2 WHERE t2.[Year] = t1.[Year] AND t2.[MatchNumber] = t1.[MatchNumber])
THEN 1
ELSE 2
END
在这里使用Case非常好,但是当在第二个表中多次找到条目时,左连接可能会导致返回多行。可能更好地使用上面提到的EXISTS结构