Sql server 在另一个表中循环并使用值作为SELECT查询的变量
延迟表中的样本数据如下所示:Sql server 在另一个表中循环并使用值作为SELECT查询的变量,sql-server,loops,Sql Server,Loops,延迟表中的样本数据如下所示: +----------+-------------+ | Customer | DaysDelayed | +----------+-------------+ | 698125 | 13 | | 698126 | 31 | | 698127 | 2 | | 698128 | 11 | | 698129 | 5 | | 698130 |
+----------+-------------+
| Customer | DaysDelayed |
+----------+-------------+
| 698125 | 13 |
| 698126 | 31 |
| 698127 | 2 |
| 698128 | 11 |
| 698129 | 5 |
| 698130 | 4 |
| 698131 | 42 |
| 698132 | 29 |
| 698133 | 29 |
+----------+-------------+
所需的输出为:
+------------+-------+
| Range | Count |
+------------+-------+
| 0-7 days | 3 |
| 8-20 days | 2 |
| 21-30 days | 2 |
| 31-45 days | 2 |
+------------+-------+
为了获得输出,我编写了4个查询:
SELECT '0-7 days', Count(*)
FROM Delays
WHERE DaysDelayed between 0 AND 7
SELECT '8-20 days', Count(*)
FROM Delays
WHERE DaysDelayed between 8 AND 20
依此类推(标签值和WHERE条件在每个查询中都会发生变化)
日范围会不时变化,范围的数量也会增加/减少
从可维护性的角度来看,我希望将范围值存储在一个表中,如下所示:
+---------+------------+----------+----------+
| RangeID | RangeName | LowerEnd | UpperEnd |
+---------+------------+----------+----------+
| 1 | 0-7 days | 0 | 7 |
| 2 | 8-20 days | 8 | 20 |
| 3 | 21-30 days | 21 | 30 |
| 4 | 31-45 days | 31 | 45 |
+---------+------------+----------+----------+
并使用一个SELECT查询(而不是目前的4个查询)循环遍历该表
请帮助。使用
UNION
操作员。它合并任意数量的给定表的行
以下是文件:
使用
联合
运算符。它合并任意数量的给定表的行
以下是文件:
您尝试过类似的方法吗
SELECT RangeName,
COUNT(d.Customer) Cnt
FROM Ranges r LEFT JOIN
Delays d ON d.DaysDelayed BETWEEN r.LowerEnd AND r.UpperEnd
GROUP BY RangeName
你试过类似的东西吗
SELECT RangeName,
COUNT(d.Customer) Cnt
FROM Ranges r LEFT JOIN
Delays d ON d.DaysDelayed BETWEEN r.LowerEnd AND r.UpperEnd
GROUP BY RangeName