【问题标题】:SQL help, Get the desired outputSQL 帮助,获取所需的输出
【发布时间】:2015-06-20 18:07:12
【问题描述】:

输入:

+---------+---------+--------+ | row_min |最大行数 | tCount | +---------+---------+--------+ | 2 | 4 | 1 | | 7 | 10 | 2 | | 13 | 14 | 3 | +---------+---------+--------+

所需输出:

+-----+--------+ |行 | 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 代码,希望仅限于使用连接和分析函数。

【问题讨论】:

标签: sql amazon-redshift


【解决方案1】:

您可以使用一个足够大的计数表来完成此操作,以包含您表中高达 MAX(row_max) 的数字:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2012-04-05
    相关资源
    最近更新 更多