我想为每条记录生成自定义序列。
示例:如果用户下订单,则订单号应为ORD-17-001。
对于下一个订单,它应该像ORD-17-002等等。
“ 17 ”是今年的。所以在明年 2018 年,第一个订单应该是ORD-18-001。
任何人都可以提出解决方案。我不是 sql 命令的专家。
这是使用生成的订单号的答案,这是使用订单的年份和表的标识列的组合生成的(为了保证订单保持一致,假设没有删除)。如果删除可能发生,那么您需要按照 Anthony Horne 的评论遵循触发方法。
设置
CREATE TABLE OrderDetails
(
ID INT Identity,
CustomerID INT,
OrderDate Date,
CreatedDate DATETIME DEFAULT getdate(),
OrderValue Decimal(18,2)
)
GO
CREATE VIEW vwOrder
As
SELECT
CustomerId, OrderDate, CreatedDate, OrderValue,
'ORD-' +
RIGHT(CAST(YEAR(OrderDate) AS CHAR(4)),2) + '-' +
RIGHT('00' +
CAST(ROW_NUMBER() OVER (PARTITION BY YEAR(OrderDate) ORDER BY ID) AS VARCHAR(3)),3) AS OrderNumber
FROM OrderDetails
GO
INSERT INTO OrderDetails (CustomerId, OrderDate, OrderValue)
VALUES
(1, '2017-6-12', 20.45),
(1, '2017-6-12', 30.25),
(1, '2017-6-13', 10.23),
(2, '2017-7-12', 5.23),
(2, '2018-6-01', 55.0),
(1, '2016-12-01', 22)
GO
询问
SELECT *
FROM VwOrder
结果
CustomerId OrderDate CreatedDate OrderValue OrderNumber
1 2016-12-01 2017-06-21 10:19:44.613 22.00 ORD-16-001
1 2017-06-12 2017-06-21 10:19:44.613 20.45 ORD-17-001
1 2017-06-12 2017-06-21 10:19:44.613 30.25 ORD-17-002
1 2017-06-13 2017-06-21 10:19:44.613 10.23 ORD-17-003
2 2017-07-12 2017-06-21 10:19:44.613 5.23 ORD-17-004
2 2018-06-01 2017-06-21 10:19:44.613 55.00 ORD-18-001
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句