2016-08-23 59 views
0

考慮以下數據SQL可以根據範圍限制交錯數據嗎?

表1

Key Value 
--- ----- 
A 1 
B 2 
C 3 
D 4 
E 5 
F 6 
G 7 
H 8 
I 9 
J 10 

表2

Q MaxValue 
- -------- 
X 3 
Y 6 
Z 10 

我試圖創建一個連接符合表1與表2的值時,的表1小於或等於表2中的MaxValue,但只有在它們大於先前的MaxValue時才如此,如

結果

Key Value Q MaxValue 
--- ----- - -------- 
A 1  X 3 
B 2  X 3 
C 3  X 3 
D 4  Y 6 
E 5  Y 6 
F 6  Y 6 
G 7  Z 10 
H 8  Z 10 
I 9  Z 10 
J 10  Z 10 

這裏你可以看到,雖然AF全部滿足小於或等於6(Y的MaxValue的)的標準,我希望AC進行匹配才X,因爲他們已經匹配X的標準小於3,X是「事先最大值」。

那麼這可以在SQL中實現嗎?

+0

您可能需要使用動態SQL來處理這個問題。 –

+0

@TimBiegeleisen,不,它不。在動態SQL中更容易,但合適的嵌套選擇將會執行。 –

回答

1

這是不是很漂亮,但它應該爲你工作:

select Z.[Key], Z.Value, T2.Q, Z.MaxValue from 
(
    select Y.[Key], Y.Value, Min(MaxValue) as MaxValue from 
    (
     select T1.*, T2.MaxValue from Table1 T1 cross join Table2 T2 
    ) Y 
    where Y.Value <= Y.MaxValue 
    group by Y.[Key], Y.Value  
) Z 
inner join Table2 T2 on Z.MaxValue = T2.MaxValue 
  • select T1.Value, T2.MaxValue from Table1 T1 cross join Table2 T2得到的價值和MaxValue的所有可能的組合。
  • 然後我根據ValueKey分組,幷包括條件where Y.Value <= Y.MaxValue排除那裏有相同Value重疊MaxValue小號組合。
  • 最後,我從Table2獲得原始Q列。
0

希望幫助

select [Key], 
     [Value], 
     (SELECT [Q] FROM [TB2] T2 WHERE [MaxValue] IN (SELECT MIN(MaxValue) FROM [Table1] T2 WHERE T1.[Value]<= T2.[MaxValue])) AS Q, 
     (SELECT MIN(MaxValue) FROM [TB2] T2 WHERE T1.[Value]<= T2.[MaxValue]) AS MaxValue 
FROM [Table2] T1 
相關問題