Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何合并多张发票,这些发票在某一点上是延期订购的,然后在mysql中完成_Mysql - Fatal编程技术网

如何合并多张发票,这些发票在某一点上是延期订购的,然后在mysql中完成

如何合并多张发票,这些发票在某一点上是延期订购的,然后在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,则

例如,我有一张发票,其中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