数据库中有两个表。
== tblOrder == OrderId Customer
== tblOrderItem == OrderItemId OrderId ItemId Qty Price
我的查询: -
SELECT o.OrderId,o.Customer,oi.ItemId,oi.Qty,oi.Price FROM tblorder o JOIN tblorderitem oi ON oi.OrderId=o.OrderId
结果: -
+---------+----------+--------+-----+-------+ | OrderId | Customer | ItemId | Qty | Price | +---------+----------+--------+-----+-------+ | 1001 | john day | 501 | 1 | 10 | | 1001 | john day | 502 | 2 | 9 | | 1002 | amy gill | 201 | 5 | 2 | | 1003 | hardcaur | 501 | 1 | 10 | | 1003 | hardcaur | 509 | 2 | 5 | | 1003 | hardcaur | 201 | 2 | 2 | +---------+----------+--------+-----+-------+
我想在select语句中生成SNO和SNOI(Temp Serial No),以便结果如下: -
+------+---------+----------+------+--------+-----+-------+ | SNO | OrderId | Customer | SNOI | ItemId | Qty | Price | +------+---------+----------+------+--------+-----+-------+ | 1 | 1001 | john day | 1 | 501 | 1 | 10 | | 1 | 1001 | john day | 2 | 502 | 2 | 9 | | 2 | 1002 | amy gill | 1 | 201 | 5 | 2 | | 3 | 1003 | hardcaur | 1 | 501 | 1 | 10 | | 3 | 1003 | hardcaur | 2 | 509 | 2 | 5 | | 3 | 1003 | hardcaur | 3 | 201 | 2 | 2 |
我的疑问是什么?
答案 0 :(得分:1)
您可以使用变量。
set @ord ='';
set @val1 =1;
set @val2 =0;
select SR_No_1, OrderId, Customer, SR_No_2, ItemId, Qty, Price
from
(
SELECT t.*,
@val1 := if(@ord=OrderId, @val1+1, 1) as SR_No_2,
@val2 := if(@ord=OrderId,@val2, @val2+1) as SR_No_1,
@ord := OrderId
FROM table1 t
) t
ORDER BY orderId asc;
<强>结果:强>
+---------+---------+----------+---------+--------+-----+-------+
| SR_No_1 | OrderId | Customer | SR_No_2 | ItemId | Qty | Price |
+---------+---------+----------+---------+--------+-----+-------+
| 1 | 1001 | john day | 1 | 501 | 1 | 10 |
| 1 | 1001 | john day | 2 | 502 | 2 | 9 |
| 2 | 1002 | amy gill | 1 | 201 | 5 | 2 |
| 3 | 1003 | hardcaur | 1 | 501 | 1 | 10 |
| 3 | 1003 | hardcaur | 2 | 509 | 2 | 5 |
| 3 | 1003 | hardcaur | 3 | 201 | 2 | 2 |
+---------+---------+----------+---------+--------+-----+-------+
<强> DEMO 强>
P.S。请注意,出于演示目的,我已将数据插入一个表格。您可以通过在2个表之间引入join