Sql server 将a或B(1或2)SQL中的一组值分隔开
注意:我已经问了一个类似的问题,但忽略了一个关键部分,即工具有许多组件 我有一个多个工具及其组件的列表,它们都有一个型号。我想根据它所属的模型对每一个工具进行分组 derivedColumn是我想要返回的查询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
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
演示链接:您可以编写类似于上一个问题的查询