如何合并多张发票,这些发票在某一点上是延期订购的,然后在mysql中完成
例如,我有一张发票,其中1张有库存,3张没有库存。后来,为那些缺货发票创建了两张发票。我希望能够将所有这些发票合并为一张,显示3张已发货的发票和1张仍在缺货的发票。 mysql表如下: 订单号 价格 模型 量 以前的身份证 1788 1,200 SBS -1 空//倒序 1788 1,200 SSC -1 空//倒序 1788 1,200 囊 1. 无效的 1788 1,200 SBB -1 空//倒序 在mysql 8中,您可以 rownumber rn 1始终具有较高的数字,如果只有-1,则没有顺序,如果该数字为正数,则将选择该行如何合并多张发票,这些发票在某一点上是延期订购的,然后在mysql中完成,mysql,Mysql,例如,我有一张发票,其中1张有库存,3张没有库存。后来,为那些缺货发票创建了两张发票。我希望能够将所有这些发票合并为一张,显示3张已发货的发票和1张仍在缺货的发票。 mysql表如下: 订单号 价格 模型 量 以前的身份证 1788 1,200 SBS -1 空//倒序 1788 1,200 SSC -1 空//倒序 1788 1,200 囊 1. 无效的 1788 1,200 SBB -1 空//倒序 在mysql 8中,您可以 rownumber rn 1始终具有较高的数字,如果只有-1,则
DBFIDLE总共有3张发票。很可能是4张发票,但所有延期订单发票都需要合并到1张主发票中。您的示例确实有所帮助,但只有在所有型号代码都不同的情况下,它才会起作用。但是,如果某些模型完全相同,则不再适用。例如,如果3个型号代码为SBB,则不会显示所有4行@NBKI如果你有新的要求,接受并投票决定答案,提出新的问题。我添加了一个新的查询。该示例有效,但与@nbk不一致。在订单中插入产品订单id、价格、型号、数量、以前的id值“1788”、“1200”、“CBL”、“1”、Null、“1788”、“1200”、“CBL”、“1”、Null、“1788”、“1200”、“CBL”、“1”、Null、“1788”、“1200”、“CBL”、“1200”、“CBL”、“1200”、“CBL”、“1”、Null、“1788”、“1200”、“CBL”、“1”、Null、“1788”、“1200”、“1200”、“CBL”、“1”、Null、“1807”、“1200”、“CBL”、“1”、“1788”、“1806”等,‘1200’、‘CBL’、‘1’、‘1788’、‘1899’、‘1200’、‘CBL’、‘1’、‘1788’、‘1809’、‘1200’、‘SPL’、‘1’、‘1788;请注意,我有6个缺货订单,但只有4个被填写,这应该显示7行,但您的示例仍然显示4@nbkas,我已经说了更多的模式和更多的代码
CREATE TABLE orders (
`order_id` INTEGER,
`price` VARCHAR(5),
`model` VARCHAR(3),
`quantity` INTEGER,
`previous_id` VARCHAR(18)
);
INSERT INTO orders
(`order_id`, `price`, `model`, `quantity`, `previous_id`)
VALUES
('1788', '1,200', 'SBS', '-1', 'Null //backordered'),
('1788', '1,200', 'SSC', '-1', 'Null //backordered'),
('1788', '1,200', 'SAC', '1', 'Null'),
('1788', '1,200', 'SBB', '-1', 'Null //backordered'),
('1811', '1,200', 'SBB', '1', '1788'),
('1865', '1,200', 'SSC', '1', '1788');
SELECT
`order_id`, `price`, `model`, `quantity`, `previous_id`
FROM
(SELECT
`order_id`, `price`, `model`, `quantity`, `previous_id`
, ROW_NUMBER() OVER ( PARTITION BY `model` ORDER BY `quantity` DESC) rn
FROM orders
WHERE `order_id` = '1788' OR `previous_id` = '1788') t1
WHERE rn = 1
order_id | price | model | quantity | previous_id
-------: | :---- | :---- | -------: | :-----------------
1788 | 1,200 | SAC | 1 | Null
1811 | 1,200 | SBB | 1 | 1788
1788 | 1,200 | SBS | -1 | Null //backordered
1865 | 1,200 | SSC | 1 | 1788
CREATE TABLE orders (
`order_id` INTEGER,
`price` VARCHAR(5),
`model` VARCHAR(3),
`quantity` INTEGER,
`previous_id` VARCHAR(18)
);
INSERT INTO orders
(`order_id`, `price`, `model`, `quantity`, `previous_id`)
VALUES
('1788', '1,200', 'SBS', '-1', 'Null //backordered'),
('1788', '1,200', 'SSC', '-1', 'Null //backordered'),
('1788', '1,200', 'SAC', '1', 'Null'),
('1788', '1,200', 'SBB', '-1', 'Null //backordered'),
('1811', '1,200', 'SBB', '1', '1788'),
('1812', '1,200', 'SBB', '1', '1788'),
('1865', '1,200', 'SSC', '1', '17
SELECT
`order_id`, `price`, `model`, `quantity`, `previous_id`
FROM
(SELECT
`order_id`, `price`, `model`, `quantity`, `previous_id`
, ROW_NUMBER() OVER ( PARTITION BY `model` ORDER BY `quantity` DESC) rn
,(SELECT COUNT(*) FROM orders WHERE `model` = o1.`model` AND `quantity` <> -1) mx
FROM orders o1
WHERE `order_id` = '1788' OR `previous_id` = '1788') t1
WHERE rn <= IF(mx = 0 , 1,mx)
order_id | price | model | quantity | previous_id
-------: | :---- | :---- | -------: | :-----------------
1788 | 1,200 | SAC | 1 | Null
1811 | 1,200 | SBB | 1 | 1788
1812 | 1,200 | SBB | 1 | 1788
1788 | 1,200 | SBS | -1 | Null //backordered
1865 | 1,200 | SSC | 1 | 1788
CREATE TABLE order_product (
`order_id` INTEGER,
`price` VARCHAR(5),
`model` VARCHAR(3),
`qty` INTEGER,
`previous_id` VARCHAR(18)
);
INSERT INTO order_product (order_id, price, model, qty, previous_id)
VALUES ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1807', '1,200', 'CBL', '1', 1788)
, ('1806', '1,200', 'CBL', '1', 1788)
, ('1899', '1,200', 'CBL', '1', 1788)
, ('1809', '1,200', 'SPL', '1', 1788);
SELECT
`order_id`, `price`, `model`, `qty`, `previous_id`
FROM
(SELECT
`order_id`, `price`, `model`, `qty`, `previous_id`
, ROW_NUMBER() OVER ( PARTITION BY `model` ORDER BY `qty` DESC) rn
,(SELECT COUNT(*) FROM order_product WHERE `model` = o1.`model` AND `qty` <> -1) mx
,(SELECT COUNT(*) FROM order_product WHERE `model` = o1.`model` AND `qty` = -1) nx
FROM order_product o1
WHERE `order_id` = '1788' OR `previous_id` = '1788') t1
WHERE rn <= IF(mx = 0 , nx,mx+ IF(nx=0, 0,nx -mx))
order_id | price | model | qty | previous_id
-------: | :---- | :---- | --: | :----------
1807 | 1,200 | CBL | 1 | 1788
1806 | 1,200 | CBL | 1 | 1788
1899 | 1,200 | CBL | 1 | 1788
1788 | 1,200 | CBL | -1 | null
1788 | 1,200 | CBL | -1 | null
1788 | 1,200 | CBL | -1 | null
1809 | 1,200 | SPL | 1 | 1788
CREATE TABLE order_product (
`order_id` INTEGER,
`price` VARCHAR(5),
`model` VARCHAR(3),
`qty` INTEGER,
`previous_id` VARCHAR(18)
);
✓
INSERT INTO order_product (order_id, price, model, qty, previous_id)
VALUES ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1788', '1,200', 'CBL', '-1', Null)
, ('1807', '1,200', 'CBL', '1', 1788)
, ('1806', '1,200', 'CBL', '1', 1788)
, ('1899', '1,200', 'CBL', '1', 1788)
, ('1809', '1,200', 'SPL', '1', 1788);
SELECT
`order_id`, `price`, `model`, `qty`, `previous_id`
FROM
(SELECT
`order_id`, `price`, `model`, `qty`, `previous_id`
, ROW_NUMBER() OVER ( PARTITION BY `model` ORDER BY `qty` DESC) rn
,(SELECT COUNT(*) FROM order_product WHERE `qty` <> -1) mx
,(SELECT COUNT(*) FROM order_product WHERE `model` = o1.`model` AND `qty` <> -1) mx1
,(SELECT COUNT(*) FROM order_product WHERE `model` = o1.`model` AND `qty` = -1) nx
FROM order_product o1
WHERE `order_id` = '1788' OR `previous_id` = '1788') t1
WHERE rn <= IF(mx = 0 , nx,mx1+ IF(nx=0, 0,nx -mx))
order_id | price | model | qty | previous_id
-------: | :---- | :---- | --: | :----------
1807 | 1,200 | CBL | 1 | 1788
1806 | 1,200 | CBL | 1 | 1788
1899 | 1,200 | CBL | 1 | 1788
1788 | 1,200 | CBL | -1 | null
1788 | 1,200 | CBL | -1 | null
1809 | 1,200 | SPL | 1 | 1788