mysql为select结果集添加序号列
两个函数简单搞定
DELIMITER $$ USE `oso_isp`$$ DROP FUNCTION IF EXISTS `rownum_reset`$$ CREATE FUNCTION `rownum_reset`() RETURNS INT(11) BEGIN SET @rno = 0; RETURN 1; END$$ DELIMITER ;
DELIMITER $$
USE `oso_isp`$$
DROP FUNCTION IF EXISTS `rownum`$$
CREATE FUNCTION `rownum`() RETURNS INT(11)
BEGIN
/* 用法如:
SELECT
`rownum`(
) AS `id`,
t.*
FROM TABLE t
WHERE rownum_reset() = 1
*/
SET @rno = @rno + 1;
RETURN @rno;
END$$
DELIMITER ;
查询结果测试
测试代码:
SELECT
`rownum`(
) AS `row_num`
,`a`.`stock_in_date` AS `stock_in_date`
,`a`.`dinner_type` AS `dinner_type`
,`a`.`stockroom_id` AS `stockroom_id`
,SUM(`a`.`dinner_num`)
AS `dinner_num`
,SUM((SELECT SUM(`wh_stock_in_order_item`.`total_price`) FROM `wh_stock_in_order_item` WHERE (`wh_stock_in_order_item`.`stock_in_order_id` = `a`.`id`)))
AS `total_price`
,COUNT(0)
AS `order_num`
,GROUP_CONCAT(DISTINCT (SELECT `staff`.`name` FROM `staff` WHERE (`staff`.`id` = `a`.`buyer_id`)) SEPARATOR ',') -- 行变列
AS `buyer_name`
FROM `wh_stock_in_order` `a`
WHERE ((`a`.`is_deleted` = 0)
AND (`a`.`status` = 1)
AND (`rownum_reset`() = 1)) -- 初始化序号列从1开始
GROUP BY `a`.`stock_in_date`,`a`.`dinner_type`,`a`.`stockroom_id`
ORDER BY `a`.`stock_in_date`,`a`.`dinner_type`
返回结果:

未来拿不出手,过去会有谁听。
作者:aLong
出处:http://www.cnblogs.com/keerdi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号