2014-01-19 42 views
0

我有許多表從所有記錄的客戶ID,最後一個訂單日期和該訂單總計$,段名稱中過濾。每個過濾器都基於不同的標準,但是,相同的客戶ID可以屬於兩個不同的表格,兩個不同的部分。同一個ID在Last Order和Total in中會有不同的值。段,表名稱是A,B,C,D。來自多個表的SQL查詢結果沒有重複

我需要以組中沒有重複ID的方式對所有段表中的記錄進行分組。即:如果一個ID出現在多個表中(比如ID 2在表A和B中),結果集必須顯示來自第一個表A的ID列。

所以我需要列出所有來自分段A表的記錄和它們的列值,來自分段B表的所有記錄和它的值的列表,除了分段B表中的任何ID在分段A中以及來自分段C表的所有記錄的列表(除了來自分段A的ID C在A或B表中。我希望它確實有道理。

我聽起來像是70-461考試中的一個問題:D我對它進行了相當徹底的研究,但也許我沒有看到如何提出這些問題。我想知道是否有人想知道如何構建查詢來獲得結果。非常感謝您的任何建議。

謝謝你們。我似乎無法發佈截圖。讓我嘗試通過html鍵入它。有更多的細分表,但只需輸入兩個給你一個想法。多謝你們!

Segment A 
---------------------------------------- 
ID | Last Order Date | Total | Segment  
---------------------------------------- 
1 | 01/01/2012  | $1  | A   
---------------------------------------- 
2 | 01/01/2012  | $1  | A  
----------------------------------------    
3 | 01/01/2012  | $5  | A  
----------------------------------------     
6 | 01/01/2012  | $7  | A  
----------------------------------------     
8 | 01/01/2012  | $8  | A 


Segment B 

ID | Last Order Date | Total | Segment  
-------------------------------------- 
4 | 01/01/2010  | $3 | B   
-------------------------------------- 
2 | 01/01/2010  | $5 | B  
--------------------------------------    
1 | 01/01/2010  | $2 | B  
--------------------------------------     
3 | 01/01/2010  | $1 | B  
--------------------------------------     
5 | 01/01/2010  | $7 | B 



Result Set 

ID | Last Order Date | Total | Segment 
--------------------------------------  
1 | 01/01/2012 | $1 | A   
-------------------------------------- 
2 | 01/01/2012 | $1 | A 
--------------------------------------     
3 | 01/01/2012 | $5 | A 
--------------------------------------     
4 | 01/01/2010 | $3 | B 
--------------------------------------  
5 | 01/01/2010 | $7 | B 
+4

這將是更快,如果你會告訴我們的表和字段,樣本數據和所需的輸出。此外,您還應該表明自己爲找到解決方案付出了多少努力,例如您嘗試過哪些查詢。 –

+0

看來,這是爲[UNION(http://msdn.microsoft.com/en-us/library/ms180026%28v=sql.100%29.aspx)語句的完美方案。 – wdosanjos

回答

0

這裏的東西,讓你開始:

SELECT ID, LastOrderDate, Total, Segment 
FROM SegmentA 

UNION ALL 
SELECT ID, LastOrderDate, Total, Segment 
FROM SegmentB 
WHERE ID NOT IN (SELECT ID FROM SegmentA) 

UNION ALL 
SELECT ID, LastOrderDate, Total, Segment 
FROM SegmentC 
WHERE ID NOT IN (SELECT ID FROM SegmentA) 
AND ID NOT IN (SELECT ID FROM SegmentB) 

UNION ALL 
SELECT ID, LastOrderDate, Total, Segment 
FROM SegmentD 
WHERE ID NOT IN (SELECT ID FROM SegmentA) 
AND ID NOT IN (SELECT ID FROM SegmentB) 
AND ID NOT IN (SELECT ID FROM SegmentC) 

一個非常簡單的答案,如果你想優化,這是需要更多的信息。

+0

非常感謝您的時間提摩太! UNION ALL是否包含重複項?雖然它是用ID NOT IN固定的,所以我不應該太擔心。 根據優化,這將是必要的,但這些表格就像我概述的那樣簡單。 ID爲int,LastOrderDate爲DATETIME,Total爲金錢,段nvarchar(5) –