2015-11-05 32 views
1

我有一個表像這樣在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 1999  2004 
Lee  122 2001  2003 
Lee  122 2002  2006 

我需要編寫一個查詢,僅包括一個名稱/ ID,如果所有的記錄他們的記錄符合以下標準: 起始日期是2005年未經過結束日期不得早於2005年

查詢的結果因此應該如下:

Name ID StartDate EndDate 
------------------------------- 
James 232 2005  2015 
James 232 2001  2006 
Joe  600 1982  2005 

下面是我的查詢,它錯誤地返回三個記錄主和李:

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 
      ) 
+1

你的查詢在哪裏? –

+0

到目前爲止您嘗試了哪些SQL? – MiguelH

+0

'where startdate <= 2005 and enddate> = 2005'。 –

回答

0

一個WHERE條款?

SELECT Name, ID, StartDate, EndDate 
FROM MyTable 
WHERE StartDate <= '2005-01-01' AND Enddate >= '2005-01-01' 
+0

我猜OP要WHERE StartDate <='2005-12-31'AND Enddate> ='2005-01-01',以包括整年。 (只是猜...) – jarlh

+0

糟糕,我錯過了「**等於**或大於2005」。我糾正了。 –

0
SELECT Name, ID, StartDate, EndDate 
FROM Table 
WHERE StartDate <= 2005 
AND Enddate >= 2005 

無需子查詢。我假設StartDate和EndDate列是int。只有當它們是日期時,你才需要使用YEAR()函數。在你的問題中,你所說的三個結果的頂部和底部行不應該返回,實際上是符合標準的。

+0

此查詢不會給出正確的答案,請明確閱讀我的問題 – Selva

+0

@Arasu - 好的,看到問題所在。你的問題是*不清楚。你爲什麼不先從事這方面的工作。 –

+0

它應該''='而不是'=>' –

0

如果正確理解,您不希望爲用戶選擇行,如果該用戶至少有一個錯誤條目。爲了實現這一目標,你可以在下面使用NOT IN

QUERY

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 
+0

我不希望所有滿足此條件的結果,我只有滿足此條件的結果 – Selva

+0

@Arasu檢查更新的答案。 –

+0

這包括名字李和閣下,但我不想要這些名字,因爲李開始日期2001年和2003年這是我的條件enddate是平等或greate比2005年未填滿,然後名主還 – Selva

相關問題