我有这张桌子:
年份状况
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,但我不明白该怎么做......
有人能帮助我吗?
由于
答案 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
阅读:http://www.sqlperformance.com/2013/01/t-sql-queries/generate-a-set-1