Sql 顺序使用。一列上有两个序列

Sql 顺序使用。一列上有两个序列,sql,sql-server,sql-server-2012,sql-server-2014,Sql,Sql Server,Sql Server 2012,Sql Server 2014,您可以使用1或2序列 假设我有一个表tblOrder,其中有两列,OrderID和Company。我的表中只使用了两家公司,IBM和Airtel 我想要的是当公司是Company=IBM时,然后将OrderID插入为1;当公司是Airtel时,它应该将OrderID插入为1001,并以增量1重复步骤,这意味着IBM的下一步OrderID应该是2,而Airtel应该是1002 我想我需要在一列中使用两个序列,带有大小写表达式。编辑:更多想法: 1) 您可以使用ROW\u NUMBER()查看(按公

您可以使用1或2序列

假设我有一个表
tblOrder
,其中有两列,
OrderID
Company
。我的表中只使用了两家公司,
IBM
Airtel

我想要的是当公司是
Company=IBM
时,然后将
OrderID
插入为1;当公司是
Airtel
时,它应该将
OrderID
插入为1001,并以增量1重复步骤,这意味着
IBM
的下一步
OrderID
应该是2,而
Airtel
应该是1002

我想我需要在一列中使用两个序列,带有大小写表达式。

编辑:更多想法: 1) 您可以使用
ROW\u NUMBER()查看(按公司订单按订单ID划分)
。这将始终为每个组提供一个无差距的跑步号码,但在每次通话中可能不相同

2) 使用两个单独的表,每个表具有一个标识,并将它们与UNION组合

3) 使用函数获取下一个ID(在插入后触发器中?)

希望这有助于

--旧文本

如果您的序列不必没有间隙,您可以尝试以下方法:

还有其他方法(例如,使用两个不同的表并将它们组合在一个UNION SELECT中)


是的,IBM需要一个序列,Airtel需要一个序列——那么到底是什么问题呢?如果公司是Airtel,您可以使用一个计算列将1000添加到您的标识ID中。但是-老实说-这听起来很糟糕的方法…我如何在一列上绑定两个序列。这就是问题所在,我该如何处理?请给我一个工作的例子…下一个ID时,你插入,然后它应该插入一系列。意味着应该是1001然后是1002然后是1003。。。。但是orderid可以是任何东西,这意味着我们不能说orderid+1000,这是错误的。@VishalMittal,你在哪里需要这个ID?一般来说,将ID用作间距较小的数字是一个坏主意(删除时会发生什么?)。我将在我的答案中添加一些想法。。。
CREATE FUNCTION dbo.GetNextID(@Company VARCHAR(MAX))
RETURNS INT
AS
BEGIN
    RETURN ISNULL((SELECT MAX(OrderID) FROM YourTable WHERE Company=@Company) + 1,0);
END
DECLARE @tbl TABLE (OrderID INT IDENTITY
                   ,Company VARCHAR(100)
                   ,ResolvedID AS CASE Company WHEN 'Airtel' THEN OrderID+1000
                                               WHEN 'Something' THEN OrderID + 2000 
                                               ELSE OrderID END);
INSERT INTO @tbl VALUES('Airtel')
                      ,('IBM')
                      ,('Something');

SELECT * FROM @tbl;