仅从主表中获取行

时间:2016-09-16 06:51:14

标签: sql sql-server tsql

表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进行标记;我需要加入类别表标记其值..

3 个答案:

答案 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结构