SQL 求助,得到想要的输出

SQL help, Get the desired output

输入:

+---------+---------+--------+
| row_min | row_max | tCount |
+---------+---------+--------+
|       2 |       4 |      1 |
|       7 |      10 |      2 |
|      13 |      14 |      3 |
+---------+---------+--------+

所需输出:

+-----+--------+
| row | tcount |
+-----+--------+
|   2 |      1 |
|   3 |      1 |
|   4 |      1 |
|   7 |      2 |
|   8 |      2 |
|   9 |      2 |
|  10 |      2 |
|  13 |      3 |
|  14 |      3 |
+-----+--------+

row_min 和 row_max 在输出中扩展,其范围内有相应的 tcount 作为数据转换的一部分,此步骤是必需的,我需要使用 SQL(驻留在 Amazon redshift 中的数据)对数据集进行操作。我被困在这个特定的步骤上。 请提供相同所需的 SQL 代码,希望仅限于使用连接和分析函数。

您可以使用足够大的计数 table 来完成,以包括高达 MAX(row_max) 的 table:

WITH Tally AS (
   SELECT ROW_NUMBER() OVER() AS n
   FROM (
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL
      SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) x(n)
   CROSS JOIN (
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL
      SELECT 1 UNION ALL SELECT 1 UNION ALL 
      SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) y(n)
)
SELECT n, tCount
FROM Tally AS t
INNER JOIN mytable AS m ON t.n >= m.row_min AND t.n <= m.row_max

我认为 Redshift 支持简单的、非递归的 CTE,所以上面的应该可行。

Demo here