Sql 创建动态查询以打印范围以及与每个范围对应的整数列的总和

Sql 创建动态查询以打印范围以及与每个范围对应的整数列的总和,sql,oracle,Sql,Oracle,例: 有一个包含以下数据的表 数据是动态添加的。 距离差必须为100。 每个范围应显示该范围内所有交易的rateMRP列的总和 TransactionID MRP 1 100 2 201 3 301 4 401 5 501 7 100 8 201 9 301 10

例:

有一个包含以下数据的表 数据是动态添加的。 距离差必须为100。 每个范围应显示该范围内所有交易的rateMRP列的总和

TransactionID   MRP
1               100
2               201
3               301
4               401
5               501
7               100
8               201
9               301
10              401
11              501


Price Range     Sum of MRP
100 - 200       200
201 - 300       402
301 - 400       602
401 - 500       802
501 - 600       1002

您需要使用UNION ALL创建范围,然后才能与表联接

SELECT 
CONCAT(t1.start,'-',t1.end) AS `Price Range`,
SUM(t.MRP) as `Sum of MRP`
FROM
test t
JOIN
(SELECT 100 as start,200 as end
 UNION ALL 
 SELECT 200 as start,300 as end 
 UNION ALL
 SELECT 300 as start,400 as end
 UNION ALL 
 SELECT 400 as start,500 as end
 UNION ALL 
 SELECT 500 as start,600 as end) as t1
ON t.MRP>=t1.start and t.MRP<=t1.end
GROUP BY t1.start,t1.end
更新

注意:我使用的是Mysql,我尝试在oracle中编译

如果你想要动力学,那么你可以用这个

set @start = 200;
set @end = 100;

SELECT 
CONCAT(t1.start,'-',t1.end) AS `Price Range`,
SUM(t.MRP) as `Sum of MRP`
FROM
test t
JOIN
( SELECT 100 as start,200 as end
  UNION ALL 
  SELECT (@start := @end+1) as start,(@end := @start+99) as end FROM test) as t1
ON t.MRP>=t1.start and t.MRP<=t1.end
GROUP BY t1.start,t1.end

您需要使用UNION ALL创建范围,然后才能与表联接

SELECT 
CONCAT(t1.start,'-',t1.end) AS `Price Range`,
SUM(t.MRP) as `Sum of MRP`
FROM
test t
JOIN
(SELECT 100 as start,200 as end
 UNION ALL 
 SELECT 200 as start,300 as end 
 UNION ALL
 SELECT 300 as start,400 as end
 UNION ALL 
 SELECT 400 as start,500 as end
 UNION ALL 
 SELECT 500 as start,600 as end) as t1
ON t.MRP>=t1.start and t.MRP<=t1.end
GROUP BY t1.start,t1.end
更新

注意:我使用的是Mysql,我尝试在oracle中编译

如果你想要动力学,那么你可以用这个

set @start = 200;
set @end = 100;

SELECT 
CONCAT(t1.start,'-',t1.end) AS `Price Range`,
SUM(t.MRP) as `Sum of MRP`
FROM
test t
JOIN
( SELECT 100 as start,200 as end
  UNION ALL 
  SELECT (@start := @end+1) as start,(@end := @start+99) as end FROM test) as t1
ON t.MRP>=t1.start and t.MRP<=t1.end
GROUP BY t1.start,t1.end

非常感谢。如果tommorow另一笔交易的MRP为700怎么办。我们的要求是创建另一个动态范围。第二个查询是我需要的,并且正在mysql中工作。@TomG-如果您想要mysql解决方案,为什么要将这个问题标记为[oracle]?谢谢。如果tommorow另一笔交易的MRP为700怎么办。我们的要求是创建另一个动态范围。第二个查询是我所需要的,并且正在mysql中工作。@TomG-如果你想要一个mysql解决方案,为什么要将这个问题标记为[oracle]?