单列权重计算、动态列Flag、动态页Flag

--单列权重计算、动态列Flag、动态页Flag
CREATE TABLE City(Id INT, Name NVARCHAR(500), Weight DECIMAL(9,2));
INSERT INTO City VALUES('1','Birmingham','7.6');
INSERT INTO City VALUES('2','Montgomery','8.6');
INSERT INTO City VALUES('3','Mobile','7.6');
INSERT INTO City VALUES('4','Anniston','6.6');
INSERT INTO City VALUES('5','Gadsden','6.6');
INSERT INTO City VALUES('6','Phoenix','5.6');
INSERT INTO City VALUES('7','Scottsdale','6.6');
INSERT INTO City VALUES('8','Tempe','7.7');
INSERT INTO City VALUES('9','Buckeye','8.7');
INSERT INTO City VALUES('10','Chandler','7.6');
INSERT INTO City VALUES('11','ElDorado','6.6');
INSERT INTO City VALUES('12','Jonesboro','8.6');
INSERT INTO City VALUES('13','PaineBluff','7.6');
INSERT INTO City VALUES('14','LittleRock','7.6');
INSERT INTO City VALUES('15','Fayetteville','7.6');
INSERT INTO City VALUES('16','FortSmith','6.6');
INSERT INTO City VALUES('17','MileHouse','8.6');
INSERT INTO City VALUES('18','Kelowna','7.7');
INSERT INTO City VALUES('19','PrinceGeorge','5.6');
INSERT INTO City VALUES('20','Modesto','7.7');
INSERT INTO City VALUES('21','LosAngeles','6.6');
INSERT INTO City VALUES('22','Monterey','7.6');
INSERT INTO City VALUES('23','SanJose','8.6');
INSERT INTO City VALUES('24','SanFrancisco','8.7');
INSERT INTO City VALUES('25','Oakland','8.7');
INSERT INTO City VALUES('26','Berkeley','7.6');
INSERT INTO City VALUES('27','WalnutCreek','8.6');
INSERT INTO City VALUES('28','Alturas','6.6');
INSERT INTO City VALUES('29','Chico','8.6');
INSERT INTO City VALUES('30','Reading','9.6');
INSERT INTO City VALUES('31','Fresno','7.6');
INSERT INTO City VALUES('32','Norwalk','8.6');
INSERT INTO City VALUES('33','Downey','6.6');
INSERT INTO City VALUES('34','LongBeach','8.6');

DECLARE @MAXWEIGHT INT='50';
WITH RecursionList AS (
SELECT cl.Id
     , cl.Name
     , cl.Weight
     , CONVERT(DECIMAL(9,2), cl.Weight) TotalWeight
	 , 1 ColumnIndex
  FROM City cl
 WHERE cl.Id=1
UNION ALL
SELECT cl.Id
     , cl.Name
     , cl.Weight
     , CONVERT(DECIMAL(9,2), CASE WHEN r.TotalWeight+cl.Weight > @MAXWEIGHT THEN cl.Weight ELSE cl.Weight+r.TotalWeight END) TotalWeight
	 , CASE WHEN r.TotalWeight+cl.Weight >@MAXWEIGHT THEN r.ColumnIndex+1 ELSE r.ColumnIndex END ColumnIndex
  FROM RecursionList r
       INNER JOIN City cl ON r.Id=cl.Id-1
)
SELECT x.Id
     , x.Name
     , x.Weight
     , x.TotalWeight
     , x.ColumnIndex
     , CEILING(x.ColumnIndex*1.0/2)  PageIndex
     , CASE x.ColumnIndex%2 WHEN 1 THEN 'A' ELSE 'B' END ColumnSign
  FROM RecursionList x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值