Sql server 2008 在处理后从select中删除行

Sql server 2008 在处理后从select中删除行,sql-server-2008,Sql Server 2008,我必须要一张这样的桌子 Year Month 2012 8 2012 7 2012 4 2012 3 2011 7 2011 3 2011 1 2010 10 2010 9 2010 8 这张表显示了哪一个月和哪一年还押,现在假设我已经完成了2012年,7个月。现在我想要一个类似的列表 Year Month 2012 8 2012 4 2012 3 2011 7 2011 3 2011 1 2010 10

我必须要一张这样的桌子

Year Month
2012  8
2012  7
2012  4
2012  3
2011  7
2011  3
2011  1
2010  10
2010  9
2010  8
这张表显示了哪一个月和哪一年还押,现在假设我已经完成了2012年,7个月。现在我想要一个类似的列表

Year Month
    2012  8
    2012  4
    2012  3
    2011  7
    2011  3
    2011  1
    2010  10
    2010  9
    2010  8
我正在使用下面的查询,但这并没有给我正确的记录

SELECT YEAR, MONTH from tablex
WHERE Year NOT IN (SELECT DISTINCT YEAR from OTHER_TABLE INNER JOIN Some_Other_Table)
AND  MONTH NOT IN (SELECT DISTINCT MONTH FROM OTHER_TABLE INNER JOIN Some_Other_Table)
当其他_表为空时,我会得到当前计数,但当其他表有2012年和第7个月时,我不会得到任何结果

注意:对于tablex和OTHER_表以及Som_OTHER_表,没有连接列可用

您只需使用:

您只需使用:


这个答案假设您在其他_表中有一行{Year=2012,Month=7}来指定完成的月份

这不起作用,因为您要分别检查年份和月份。因此,您没有从结果中删除第2012、7行,而是删除了年=2012的所有行和月=7的所有行。请改为尝试此反加入:

SELECT x.YEAR, x.MONTH
FROM tablex x
LEFT OUTER JOIN OTHER_TABLE y ON x.YEAR = y.YEAR AND x.MONTH = y.MONTH
WHERE y.YEAR IS NULL

这个答案假设您在其他_表中有一行{Year=2012,Month=7}来指定完成的月份

这不起作用,因为您要分别检查年份和月份。因此,您没有从结果中删除第2012、7行,而是删除了年=2012的所有行和月=7的所有行。请改为尝试此反加入:

SELECT x.YEAR, x.MONTH
FROM tablex x
LEFT OUTER JOIN OTHER_TABLE y ON x.YEAR = y.YEAR AND x.MONTH = y.MONTH
WHERE y.YEAR IS NULL

你是没有结果还是结果太少?您在其他_表中有哪些行?是否没有结果或结果太少?在其他表中有哪些行?是否有其他方法,因为我已经有了这样的结构:从主表中选择,其中Col1从表A中选择内部联接表B,Col2从表A中选择内部联接表B,其中主表与表A和表A没有联接条件TableB@Zerotoinfinite我不确定我是否完全明白。你能发布所有相关的表格结构和一些样本数据吗,除了这个查询,还有其他方法吗?因为我已经有了这样的结构:SELECT FROM MAIN TABLE,其中Col1 SELECT FROM TABLEA INTERNAL JOIN TABLEB和Col2SELECT FROM TABLEA INTERNAL JOIN TABLEB,其中MAINTTABLE与TABLEA和TABLE没有连接条件TableB@Zerotoinfinite我不确定我是否完全明白。您能否发布所有相关的表结构和一些示例数据,以及此查询?