Sql 为始终满足指定标准的实体选择所有记录
我在SQL Server中有这样一个表:Sql 为始终满足指定标准的实体选择所有记录,sql,sql-server,sql-server-2008,sql-server-2012,Sql,Sql Server,Sql Server 2008,Sql Server 2012,我在SQL Server中有这样一个表: Name ID StartDate EndDate -------------------------------- James 232 2005 2015 James 232 2001 2006 Joe 600 1982 2005 Lord 608 2003 2005 Lord 608 2006 2012 Lord 608
Name ID StartDate EndDate
--------------------------------
James 232 2005 2015
James 232 2001 2006
Joe 600 1982 2005
Lord 608 2003 2005
Lord 608 2006 2012
Lord 608 1999 2004
Lee 122 2001 2003
Lee 122 2002 2006
我需要编写一个查询,如果所有记录都满足以下条件,则该查询只包含名称/ID的记录:
StartDate不在2005年之后,EndDate不能在2005年之前
因此,查询结果应如下所示:
Name ID StartDate EndDate
-------------------------------
James 232 2005 2015
James 232 2001 2006
Joe 600 1982 2005
下面是我的查询,它错误地返回了Lord和Lee的三条记录:
SELECT *
FROM #FortuneCompany fc
WHERE EXISTS (
SELECT 1
FROM #FortuneCompany fc1
WHERE fc1.ID = fc.ID
AND YEAR(fc1.StartDate)<=2005
AND YEAR(fc1.EndDate)>=2005
)
WHERE子句
WHERE子句
不需要子查询。我假设StartDate和EndDate列是int。只有当它们是date时,才需要使用YEAR函数。在您的问题中,您所说的三个结果的顶部和底部行不应返回,但实际上符合标准
不需要子查询。我假设StartDate和EndDate列是int。只有当它们是date时,才需要使用YEAR函数。在您的问题中,您所说的三个结果的顶部和底部行实际上不应返回,它们确实符合标准。如果理解正确,您根本不想为用户选择行,如果该用户至少有一个错误条目。要实现此目标,您可以在以下情况下使用NOT: 质疑 输出
如果理解正确,则如果该用户至少有一个错误条目,则根本不希望为该用户选择行。要实现此目标,您可以在以下情况下使用NOT: 质疑 输出
您的查询在哪里?到目前为止您尝试了什么SQL?其中startdate=2005。为什么不包括joe`joe 600 1982 2005`1982小于2005,2006大于2005,因此,它应该包括从存在的《财富》公司中选择*从存在的《财富》公司中选择1从fc1.ID=fc.ID和YEARfc1.StartDate=2005这是我的查询您的查询在哪里?到目前为止您尝试了什么SQL?其中StartDate=2005。为什么不包括joe`joe 600 1982 2005`1982年小于2005年,2006年大于2005年,因此应包括从存在的《财富》公司中选择*从fc1.ID=fc.ID和YEARfc1.StartDate=2005的《财富》公司fc1中选择1。这是我的问题。我猜OP希望其中StartDate='2005-01-01'包括所有年份。只是猜测…哎呀,我错过了与2005年相等或更大的比赛。我已经更正了。我想OP希望StartDate='2005-01-01'包含所有年份。只是猜测…哎呀,我错过了与2005年相等或更大的比赛。我已经纠正了。我不想结果是谁都满足了这个条件,我有一个结果,他只填写了这个条件,包括名字lee和lord,但我不想要这些名字,因为lee的起始日期是2001年和2003年,这是我的条件,结束日期等于或大于2005年,没有填写,然后名字lord,这将是正确的答案。如果它对你有效-@Arasu-请标记为答案。我不希望结果完全符合这个条件,我有一个结果,他只填写了这个条件,包括名字lee和lord,但我不想要这些名字,因为lee的起始日期是2001年和2003年,这是我的条件,结束日期等于或大于2005年,没有填写,然后名字lord,这将是正确的答案。如果它对你有用-@Arasu-请标记为答案。此查询没有给出正确答案请阅读我的问题clearly@Arasu-好吧,看,这就是问题所在。你的问题不清楚。你为什么不先处理这个问题呢。它应该是>=而不是=>这个查询没有给出正确的答案请阅读我的问题clearly@Arasu-好吧,看,这就是问题所在。你的问题不清楚。为什么不先处理一下呢。它应该是>=而不是=>
SELECT Name, ID, StartDate, EndDate
FROM MyTable
WHERE StartDate <= '2005-01-01' AND Enddate >= '2005-01-01'
SELECT Name, ID, StartDate, EndDate
FROM Table
WHERE StartDate <= 2005
AND Enddate >= 2005
SELECT Name, ID, StartDate, EndDate
FROM #FortuneCompany fc
WHERE Name NOT IN(
SELECT Name
FROM #FortuneCompany fc
WHERE StartDate > 2005
OR Enddate < 2005)
CREATE TABLE #FortuneCompany
(
Name NVARCHAR(40),
ID INT,
StartDate INT,
EndDate INT
)
INSERT INTO #FortuneCompany VALUES
('James',232, 2005, 2015),
('James',232, 2001, 2006),
('Joe' ,600, 1982, 2005),
('Lord' ,608, 2003, 2005),
('Lord' ,608, 2006, 2012),
('Lord' ,608, 1999, 2004),
('Lee' ,122, 2001, 2003),
('Lee' ,122, 2002, 2006)
Name ID StartDate EndDate
James 232 2005 2015
James 232 2001 2006
Joe 600 1982 2005