MySQL加入查询自动生成序列号

时间:2017-11-23 06:08:23

标签: mysql join

我的跟踪查询根据我的记录给出了结果,但我遇到的问题是我的查询生成了一些不同的序列号。无论如何我需要序列号从1开始但这个查询是连接查询显示不同的序列号就像我可以说在加入它时跳过系列。 请帮助从db生成从1到行数的系列,而不必跳过它们之间的系列。在此先感谢

SELECT
    @a:=@a+1 sno,
    p.po_no as id,
    DATE_FORMAT(p.po_date, '%d-%m-%Y') as po_date,
    p.customer,
    p.cust_po as po_no,
    p.tot_ord_qty,
    DATE_FORMAT(p.delivery_date, '%d-%m-%Y') AS delivery_date,
    p.dc_status,
    p.inv_status,
    p.tot_dc_qty,
    p.tot_inv_qty,
    COALESCE(GROUP_CONCAT(distinct d.dc_no SEPARATOR ', '), 0) as dc,
    GROUP_CONCAT( d.active SEPARATOR ', ') as status
FROM (SELECT @a:= 0) AS a, po_header p
LEFT JOIN dc_details d
    ON p.cust_po = d.cust_po
group by
    p.cust_po

结果: My Result SnipCut here

1 个答案:

答案 0 :(得分:1)

您跳过号码的原因是GROUP BY。在生成序列号之后完成分组,因此它将所有行与相同的cust_po组合在一起,您只能看到其中一个序列号。

将分组移动到子查询中,并在主查询中添加序列号。

SELECT @a := @a+1 AS sno, t.*
FROM (SELECT @a := 0) AS a
CROSS JOIN (
    SELECT p.po_no as id,
            DATE_FORMAT(p.po_date, '%d-%m-%Y') as po_date,
            p.customer,
            p.cust_po as po_no,
            p.tot_ord_qty,
            DATE_FORMAT(p.delivery_date, '%d-%m-%Y') AS delivery_date,
            p.dc_status,
            p.inv_status,
            p.tot_dc_qty,
            p.tot_inv_qty,
            COALESCE(GROUP_CONCAT(distinct d.dc_no SEPARATOR ', '), 0) as dc,
            GROUP_CONCAT( d.active SEPARATOR ', ') as status
    FROM po_header AS p
    LEFT JOIN dc_details AS d ON p.cust_po = d.cust_po
    GROUP BY p.cust_po
    ORDER BY p.cust_po) AS t