2017-05-04 53 views
0

注意:我已經提出了類似的問題,但省略了一個關鍵部分,因爲工具有很多組件。將一組值分爲A或B(1或2)SQL

我有一個多個工具及其組件都有一個型號的列表。我想根據它所屬的模型對每一個第二個工具進行分組。

的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功能,但一直未能解決。

+0

您可以編寫查詢類似於前面的問題 –

回答

1

你可以使用dense_rank()mod function %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 

演示鏈接:http://rextester.com/LIQL79881

0

希望它可以幫助你

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; 
相關問題