2015-06-20 49 views
-1

輸入:SQL幫助下,獲得所需的輸出

 
+---------+---------+--------+ 
| 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代碼,希望僅限於使用聯接和分析函數。

+0

這個輸出後面是否有邏輯支持? – potashin

+1

@suslov'row_min'和'row_max'在輸出中展開,其範圍內有相應的'tCount' – bugwheels94

+2

這不是一個代碼寫入服務。到目前爲止,您嘗試過什麼來生成數字序列? –

回答

2

您可以使用符合表足夠大,以包括數字作爲一個高你的表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 

我認爲紅移支持簡單的,非遞歸,熱膨脹係數,因此上述應工作。

Demo here