Sql server 将a或B(1或2)SQL中的一组值分隔开

Sql server 将a或B(1或2)SQL中的一组值分隔开,sql-server,Sql Server,注意:我已经问了一个类似的问题,但忽略了一个关键部分,即工具有许多组件 我有一个多个工具及其组件的列表,它们都有一个型号。我想根据它所属的模型对每一个工具进行分组 derivedColumn是我想要返回的查询 declare @t table (Model int, toolID INT ,Component INT,DerivedColumn int); insert into @t values (1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,2),(1,2,2,2

注意:我已经问了一个类似的问题,但忽略了一个关键部分,即工具有许多组件

我有一个多个工具及其组件的列表,它们都有一个型号。我想根据它所属的模型对每一个工具进行分组

derivedColumn是我想要返回的查询

declare @t table (Model int, toolID INT ,Component INT,DerivedColumn int);
insert into @t values (1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,2),(1,2,2,2),(1,2,3,2),(1,3,1,1),(1,3,2,1),(1,3,3,1),(1,4,1,2),(1,4,2,2),(1,4,3,2),(1,5,1,1),(1,5,2,1),(1,5,3,1),(2,1,1,1),(2,1,2,1),(2,2,1,2),(2,2,2,2),(2,3,1,1),(2,3,2,1)


SELECT * FROM @t

Model   toolID  Component   DerivedColumn
1       1       1           1
1       1       2           1
1       1       3           1
1       2       1           2
1       2       2           2
1       2       3           2
1       3       1           1
1       3       2           1
1       3       3           1
1       4       1           2
1       4       2           2
1       4       3           2
1       5       1           1
1       5       2           1
1       5       3           1
2       1       1           1
2       1       2           1
2       2       1           2
2       2       2           2
2       3       1           1
2       3       2           1
属于一个模型的每一个工具都应该有一个备用组号

我相信我必须使用windows功能,但无法解决此问题。

希望它可以帮助您

DECLARE @T TABLE (Model INT, toolID INT ,Component INT,DerivedColumn INT);
INSERT INTO @T VALUES (1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,2),(1,2,2,2),(1,2,3,2),(1,3,1,1),(1,3,2,1),(1,3,3,1),(1,4,1,2),(1,4,2,2),(1,4,3,2),(1,5,1,1),(1,5,2,1),(1,5,3,1),(2,1,1,1),(2,1,2,1),(2,2,1,2),(2,2,2,2),(2,3,1,1),(2,3,2,1)

SELECT Model
      ,toolID
      ,ROW_NUMBER()Over(Partition by toolID order by Model) AS AlternativetoolID
      ,Component
      ,DerivedColumn
from @t;
您可以使用稠密_秩和mod函数%2来计算

DECLARE @SampleData AS TABLE
(
   Model int, 
   ToolId int,
   Component int
)

INSERT INTO @SampleData
(
   Model, ToolId, Component
)
VALUES
(1, 1, 1),(1, 1, 2),(1, 1, 3),(1, 2, 1),
(1, 2, 2),(1, 2, 3),(1, 3, 1),(1, 3, 2),
(1, 3, 3),(1, 4, 1),(1, 4, 2),(1, 4, 3),
(1, 5, 1),(1, 5, 2),(1, 5, 3),(2, 1, 1),
(2, 1, 2),(2, 2, 1),(2, 2, 2),(2, 3, 1),
(2, 3, 2)

SELECT *,
     CASE (dense_rank() OVER(PARTITION BY sd.Model ORDER BY sd.ToolId) + 1) % 2
         WHEN 1 THEN 2
         WHEN 0 THEN 1
     END as  DerivedColumn
FROM @SampleData sd
ORDER BY sd.Model, sd.ToolId

演示链接:

您可以编写类似于上一个问题的查询