这可能很奇怪,但我想以某种方式将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设置间隔之间的实例。 这是怎么回事:
我可以使用这样的多个选项来做到这一点:
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,如果这对您有所帮助。
使用光标是不可能的,因为这两个表中有一些很多的记录和规则。
答案 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