2013-10-04 80 views
0

我試圖從一個表中找到。一列不匹配的所有記錄。我還需要根據無法匹配的條目遵循某些情況的日期。SQL Server:返回一列不同的兩條記錄

實施例:

record  COL1|COL2|COL3| COL4 | COL 5 
1)   A B X 1/20/13 1/20/13 
2)   A B Y 1/15/13 1/16/13 
3)   B D X 2/14/13 2/16/13 
4)   B D Y 2/15/13 4/09/13 

我需要的是(使用記錄1 & 2爲例)什麼:

  • COL1 = col1和COL2 = COL2

  • COL3 <> COL3 (在COL3中只存在條目X或Y.

  • 記錄2上的COL4在記錄1上> = COL5

換句話說,我需要COL1和COL2被複制的所有記錄,但COL3是唯一的;並與Y中的記錄都必須有COL4> =記錄與X COL5 -7days

+0

那基本的布爾邏輯。你會在這裏找到答案,但你什麼都不會學。嘗試一下,不難。 – usr

回答

0

SQL Fiddle

MS SQL Server 2008的架構設置

CREATE TABLE Table1 
    ([record] int, [COL1] varchar(1), [COL2] varchar(1), [COL3] varchar(1), [COL4] date, [COL5] date) 
; 

INSERT INTO Table1 
    ([record], [COL1], [COL2], [COL3], [COL4], [COL5]) 
VALUES 
    (1, 'A', 'B', 'X', '2013-01-20', '2013-01-20'), 
    (2, 'A', 'B', 'Y', '2013-01-15', '2013-01-16'), 
    (3, 'B', 'D', 'X', '2013-02-14', '2013-02-16'), 
    (4, 'B', 'D', 'Y', '2013-02-15', '2013-04-09'), 
    (5, 'C', 'E', 'X', '2013-02-14', '2013-02-16'), 
    (6, 'C', 'E', 'Y', '2013-01-15', '2013-02-09') 
; 

查詢1

SELECT t1.* 
FROM Table1 t1 
INNER JOIN Table1 t2 ON t1.col1 = t2.col1 AND 
         t1.col2 = t2.col2 AND 
         t1.col3 <> t2.col3 AND 
         t2.col4 >= dateadd(dd,-7,t1.col5) 
WHERE t1.col3 = 'X' 
UNION 
SELECT t2.* 
FROM Table1 t1 
INNER JOIN Table1 t2 ON t1.col1 = t2.col1 AND 
         t1.col2 = t2.col2 AND 
         t1.col3 <> t2.col3 AND 
         t2.col4 >= dateadd(dd,-7,t1.col5) 
WHERE t1.col3 = 'X' 

Results

| RECORD | COL1 | COL2 | COL3 |  COL4 |  COL5 | 
|--------|------|------|------|------------|------------| 
|  1 | A | B | X | 2013-01-20 | 2013-01-20 | 
|  2 | A | B | Y | 2013-01-15 | 2013-01-16 | 
|  3 | B | D | X | 2013-02-14 | 2013-02-16 | 
|  4 | B | D | Y | 2013-02-15 | 2013-04-09 | 
+0

因此,帶有「UNION」的查詢可能是您正在查找的內容... –

相關問題