2017-09-12 19 views
-5

我有一個表日期在如下表有更多的記錄,但簡單的詢問用途:MS SQL其中一列是X或Y兩者返回

Name  | Date  | Grade 
Person 1 | 01-01-2001 | B 
Person 1 | 31-01-2001 | A 
Person 2 | 01-01-2001 | C 
Person 3 | 31-01-2001 | A 

我要回第一個人的記錄,而不是其他兩個記錄。 AND沒有明顯返回,OR返回所有內容。我想搜索日期而不是等級

那麼結果將是:

Name  | Date  | Grade 
Person 1 | 01-01-2001 | B 
Person 1 | 31-01-2001 | A 
+1

描述你爲什麼要這樣的結果。 – jarlh

+0

你的期望輸出是什麼...... –

+2

'SELECT * FROM tablename WHERE Name ='Person 1';' –

回答

3

一個簡單的方法來處理,這是由人聚集,然後斷言,感興趣的兩個日期都存在:

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT Name 
    FROM yourTable 
    WHERE Date IN ('2001-01-01', '2001-01-31') 
    GROUP BY Name 
    HAVING COUNT(DISTINCT Date) = 2 
) t2 
    ON t1.Name = t2.Name 
+0

我已經更新了這個問題。我需要搜索日期,而不是年級或人員。 – tonyyeb

+2

@tonyyeb你應該發佈另一個問題。 – DhruvJoshi

+0

@tonyyeb現在我甚至會說你原來的問題還不清楚。回答更新,希望你在找什麼。 –

1

你可以使用EXISTS返回一個行,如果存在具有該名稱的另一行,具有另一個A/B等級。

select t1.* 
from tablename t1 
where t1.Date in ('2001-01-01', '2001-01-31') 
    and exists (select 1 from tablename t2 
       where t2.Name = t1.Name 
       and t2.Date in ('2001-01-01', '2001-01-31') 
       and t2.Date <> t1.Date) 
+0

我想按日期搜索,而不是年級或人物。 – tonyyeb

相關問題