选择不存在SQL Server的值

时间:2014-04-23 15:00:06

标签: sql sql-server-2008

我有这张桌子:

年份状况
2014 OK
2014 OK
2013 OK
2011年确定

我没有2012年和2010年的记录,而且我有2014年两次。

我需要做的就是返回:

年份状况
2014 OK
2014 OK
2013 OK
2012 NOK
2011 OK
2010 NOK

我看到了How to Select records that don't exist in Sql Server,但我不明白该怎么做......

有人能帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

您正在寻找类似的东西。

SELECT
   t1.year,
   isnull(t2.status, 'NOK') status
FROM
   (
      SELECT 2014 year UNION ALL
      SELECT 2013 year UNION ALL
      SELECT 2012 year UNION ALL
      SELECT 2011 year UNION ALL
      SELECT 2010 year
   ) t1

   LEFT JOIN my_year_table t2 on
      t2.year = t1.year

答案 1 :(得分:1)

您可以使用序列Left-Join,例如:

WITH Years 
     AS (SELECT TOP ((SELECT Max(YEAR)FROM STATUS) - (SELECT Min(YEAR)FROM 
        STATUS) + 1) 
        Year = (SELECT Min(YEAR) 
        FROM   STATUS) 
        + Row_number() OVER (ORDER BY [OBJECT_ID]) 
         FROM   sys.ALL_OBJECTS) 
SELECT y.YEAR, 
       Status = CASE 
                  WHEN s.STATUS IS NULL THEN 'NOK' 
                  ELSE s.STATUS 
                END 
FROM   Years y 
       LEFT OUTER JOIN STATUS s 
                    ON y.YEAR = s.YEAR 
ORDER  BY y.YEAR 

Demo

阅读:http://www.sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1