我有以下SQL表(第一个表),其中此表存储特定商店的订单。我不确定它是否可行,但我想制作一个类似第二张表的视图。
字段orderNumber保存特定订单的编号。具有相同订单号的行意味着属于相同的订单。
所以基于orderNumber和第一个表的类型,我想生成字段dealCounter(参见第二个表),其中计算每个订单的交易数量,并将相同数量的dealCounter分配给属于的所有行同样的订单。
每次我们找到类型12,然后我们将dealCounter增加1。如果我们更改orderNumber,则重置dealCounter。
我尝试使用rank()
函数,但我无法管理dealCounter并设置我想要的值。
有什么方法可以解决我的问题吗?
menuid type orderNumber storeNumber lineNumber
---------------------------------------------------
10 12 100122 10 0
8 9 100122 10 1
5 9 100122 10 2
3 9 100122 10 3
11 12 100122 10 4
5 9 100122 10 5
3 9 100122 10 6
10 12 100122 10 7
8 9 100122 10 8
5 9 100122 10 9
3 9 100122 10 10
10 12 100123 10 0
8 9 100123 10 1
5 9 100123 10 2
3 9 100123 10 3
11 12 100123 10 4
5 9 100123 10 5
3 9 100123 10 6
dealCounter menuid type orderNumber storeNumber lineNumber
---------------------------------------------------------------
1 10 12 100122 10 0
1 8 9 100122 10 1
1 5 9 100122 10 2
1 3 9 100122 10 3
2 11 12 100122 10 4
2 5 9 100122 10 5
2 3 9 100122 10 6
3 10 12 100122 10 7
3 8 9 100122 10 8
3 5 9 100122 10 9
3 3 9 100122 10 10
1 10 12 100123 10 0
1 8 9 100123 10 1
1 5 9 100123 10 2
1 3 9 100123 10 3
2 11 12 100123 10 4
2 5 9 100123 10 5
2 3 9 100123 10 6
答案 0 :(得分:2)
您可以使用CROSS APPLY
:
SELECT t3.cnt AS dealCounter, menuid, type, orderNumber, storeNumber
FROM mytable AS t1
CROSS APPLY (
SELECT COUNT(CASE WHEN type = 12 THEN 1 END) AS cnt
FROM mytable AS t2
WHERE t1.orderNumber = t2.orderNumber
AND t2.lineNumber <= t1.lineNumber) AS t3
对于mytable
的每一行,我们都应用CROSS APPLY
运算符,以便获得在之前或与行相同的type=12
条记录的数量在同一个orderNumber
切片内。
答案 1 :(得分:1)