以这样的方式排列记录:d类总是排在第一位,然后e&f将以1:1的比例排列

wqsoz72f  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(329)

我想以这样一种方式来安排我的记录:d类总是排在第一位,然后e和f的比例是1:1,这意味着如果e排在第一位,那么f排在e之后,d总是排在第一位,这个顺序继续。
注意-如果某个类别出现多次,则与同一类别的另一个日期相比,具有旧日期的记录首先出现。

注意-allocationid最后14位包含日期和时间。根据allocationid日期,我们查找相同的类别记录,以便在类别内进行排列。
我的问题-

SELECT m.allocationID,mt.CatId,mt.CatSName,r.officerName,r.desgName,r.grade,r.cellNo,CASE 
                   WHEN mt.CatSName = 'D' THEN 0
                   WHEN mt.CatSName = 'E' THEN 1
                   ELSE 2
                   END as ord
                   FROM msttransaction m,msttemp mt,regusers r WHERE (m.isPending='Y' AND m.statusR='Approve' AND m.iscancelled='No' AND m.allocationID IN ( SELECT mt.AllocationId FROM msttemp WHERE mt.quarterId='082505012')and SUBSTRING(m.AllocationId,1,11)=r.pfNpsNo)  OR (m.isPending='N' AND m.type='Transit' AND m.statusR='Approve' AND m.iscancelled='No' AND m.allocationID IN ( SELECT mt.AllocationId FROM msttemp WHERE mt.quarterId='082505012')and SUBSTRING(m.AllocationId,1,11)=r.pfNpsNo) ORDER BY ord,SUBSTRING(m.AllocationId, -14)
brtdzjyr

brtdzjyr1#

根据您的类别,您可以在select子句上取一个临时变量。0表示所有“d”类别。请看我的问题。希望对你有用。
示例-

SET @a := 0;
SET @b := 0;
SELECT *, IF((t1.cat = 'D'),0,IF(cat ='E', @a :=@a+1,@b :=@b+1)) as t
FROM (select * from `temp` ORDER BY cat ASC) as t1 
ORDER BY t ASC, cat ASC;

相关问题