Oracle excel的年龄分析

Oracle excel的年龄分析,oracle,Oracle,我想将一组数据分发到如下表中: RANGE(days) No of days. Amount 0-30 - 0 31-180 1 4,185.78 181-365 2 74,056.86 366 and above 6 587,198.35 TOTAL 9 665,440.99

我想将一组数据分发到如下表中:

RANGE(days)  No of days.       Amount
0-30            -                0
31-180          1             4,185.78 
181-365         2             74,056.86 
366 and above   6            587,198.35 
TOTAL           9            665,440.99
源数据

S/N START DATE  Details   Tran Amt      END DATE 
1   22/05/2015  A         448,749.14    30/06/2018
2   22/09/2015  B           4,883.02    30/06/2018
3   04/11/2015  C          45,646.27    30/06/2018
4   26/04/2016  D          42,861.99    30/06/2018
5   16/06/2016  E          23,144.23    30/06/2018
6   27/07/2016  F         21,913.70     30/06/2018
7   11/08/2017  G         61,396.94     30/06/2018
8   30/11/2017  H         12,659.92     30/06/2018
9   19/03/2018  I          4,185.78     30/06/2018
    TOTAL                665,440.99 
谢谢

Oracle 11g R2架构设置

CREATE TABLE data ( SN, START_DATE, Details, TranAmt ) AS
  SELECT 1, DATE '2015-05-22', 'A', 448749.14 FROM DUAL UNION ALL
  SELECT 2, DATE '2015-09-22', 'B',   4883.02 FROM DUAL UNION ALL
  SELECT 3, DATE '2015-11-04', 'C',  45646.27 FROM DUAL UNION ALL
  SELECT 4, DATE '2016-04-26', 'D',  42861.99 FROM DUAL UNION ALL
  SELECT 5, DATE '2016-06-16', 'E',  23144.23 FROM DUAL UNION ALL
  SELECT 6, DATE '2016-07-27', 'F',  21913.70 FROM DUAL UNION ALL
  SELECT 7, DATE '2017-08-11', 'G',  61396.94 FROM DUAL UNION ALL
  SELECT 8, DATE '2017-11-30', 'H',  12659.92 FROM DUAL UNION ALL
  SELECT 9, DATE '2018-03-19', 'I',   4185.78 FROM DUAL;
WITH end_date ( end_date ) AS (
  SELECT DATE '2018-06-30' FROM DUAL
),
ranges ( first, last ) AS (
  SELECT   0,   30 FROM DUAL UNION ALL
  SELECT  31,  180 FROM DUAL UNION ALL
  SELECT 181,  365 FROM DUAL UNION ALL
  SELECT 366, NULL FROM DUAL
)
SELECT NVL2(
         r.first,
         r.first || NVL2(
                      MAX( r.last ),
                      ' - ' || MAX( r.last ),
                      ' and above'
                    ),
         'Total'
       ) AS range,
       COUNT( d.sn ) AS "No of days",
       COALESCE( SUM( d.TranAmt ), 0 ) AS Amount
FROM   data d
       CROSS JOIN end_date e
       RIGHT OUTER JOIN ranges r
       ON (    d.start_date < e.end_date + 1 - r.first
           AND (  r.last IS NULL
               OR d.start_date >= e.end_date - r.last ) )
GROUP BY ROLLUP( r.first )
ORDER BY r.first
|         RANGE | No of days |    AMOUNT |
|---------------|------------|-----------|
|        0 - 30 |          0 |         0 |
|      31 - 180 |          1 |   4185.78 |
|     181 - 365 |          2 |  74056.86 |
| 366 and above |          6 | 587198.35 |
|         Total |          9 | 665440.99 |
查询1

CREATE TABLE data ( SN, START_DATE, Details, TranAmt ) AS
  SELECT 1, DATE '2015-05-22', 'A', 448749.14 FROM DUAL UNION ALL
  SELECT 2, DATE '2015-09-22', 'B',   4883.02 FROM DUAL UNION ALL
  SELECT 3, DATE '2015-11-04', 'C',  45646.27 FROM DUAL UNION ALL
  SELECT 4, DATE '2016-04-26', 'D',  42861.99 FROM DUAL UNION ALL
  SELECT 5, DATE '2016-06-16', 'E',  23144.23 FROM DUAL UNION ALL
  SELECT 6, DATE '2016-07-27', 'F',  21913.70 FROM DUAL UNION ALL
  SELECT 7, DATE '2017-08-11', 'G',  61396.94 FROM DUAL UNION ALL
  SELECT 8, DATE '2017-11-30', 'H',  12659.92 FROM DUAL UNION ALL
  SELECT 9, DATE '2018-03-19', 'I',   4185.78 FROM DUAL;
WITH end_date ( end_date ) AS (
  SELECT DATE '2018-06-30' FROM DUAL
),
ranges ( first, last ) AS (
  SELECT   0,   30 FROM DUAL UNION ALL
  SELECT  31,  180 FROM DUAL UNION ALL
  SELECT 181,  365 FROM DUAL UNION ALL
  SELECT 366, NULL FROM DUAL
)
SELECT NVL2(
         r.first,
         r.first || NVL2(
                      MAX( r.last ),
                      ' - ' || MAX( r.last ),
                      ' and above'
                    ),
         'Total'
       ) AS range,
       COUNT( d.sn ) AS "No of days",
       COALESCE( SUM( d.TranAmt ), 0 ) AS Amount
FROM   data d
       CROSS JOIN end_date e
       RIGHT OUTER JOIN ranges r
       ON (    d.start_date < e.end_date + 1 - r.first
           AND (  r.last IS NULL
               OR d.start_date >= e.end_date - r.last ) )
GROUP BY ROLLUP( r.first )
ORDER BY r.first
|         RANGE | No of days |    AMOUNT |
|---------------|------------|-----------|
|        0 - 30 |          0 |         0 |
|      31 - 180 |          1 |   4185.78 |
|     181 - 365 |          2 |  74056.86 |
| 366 and above |          6 | 587198.35 |
|         Total |          9 | 665440.99 |

现在还不清楚你问这个是为了什么。您标记了Oracle数据库,并在标题中包含Excel。那么:源数据在哪里,您希望结果在哪里?您自己做了哪些尝试?你被困在哪里?你到底面临什么问题?