来自记录集的Between子句

时间:2014-12-23 14:56:18

标签: sql sql-server

这可能很奇怪,但我想以某种方式将BETWEEN子句与表结合起来,如下例所示。

假设我们有两个表:

Tbl1
╔════════╦════════╗
║ Value1 ║ Value2 ║
╠════════╬════════╣
║      1 ║      3 ║
║      5 ║      8 ║
╚════════╩════════╝

Tbl2
╔═══════╦══════╗
║ Value ║ Stat ║
╠═══════╬══════╣
║     1 ║    5 ║
║     2 ║    0 ║
║     3 ║    8 ║
║     5 ║    1 ║
║     7 ║    2 ║
║    10 ║    0 ║
║    11 ║    5 ║
║    14 ║    7 ║
╚═══════╩══════╝

Tbl1设置间隔规则,Tbl2设置间隔之间的实例。 这是怎么回事:

  • 第一个间隔是1到3,所以取所有Tbl2记录,其中Value在1和3之间并总结Stat
  • 第一个间隔是5到8,所以取所有Tbl2记录,其中Value在5到8之间并总结Stat

我可以使用这样的多个选项来做到这一点:

SELECT sum(Stat) FROM Tbl2 WHERE [Value] BETWEEN 1 AND 3
SELECT sum(Stat) FROM Tbl2 WHERE [Value] BETWEEN 5 AND 8

有没有办法在一个选择中总结一切? 我正在使用SQL Server 2008 R2,如果这对您有所帮助。

使用光标是不可能的,因为这两个表中有一些很多的记录和规则。

2 个答案:

答案 0 :(得分:5)

SELECT tbl1.value1, tbl1.value2, sum(tbl2.Stat) 
FROM Tbl1
JOIN Tbl2 ON tbl2.Value BETWEEN tbl1.value1 AND tbl1.value2
GROUP BY tbl1.value1, tbl1.value2

答案 1 :(得分:2)

试试这个。使用Join on Between Condition

SELECT  b.value1, b.value2, sum(a.Stat) 
FROM   table2 a
       JOIN table1 b
         ON a.value BETWEEN b.value1 AND b.value2 
 GROUP BY b.value1, b.value2