我有一個表中有兩行From_ID和To_ID。我需要基於具有相同Work_ID的行進行分組,並且分組應該從From_ID開始,並且應該取其To_ID並查找具有From_ID作爲該行的To_ID的行。這些不能按順序。只有沒有具有From_ID作爲To_ID的行時,該組才應該結束。我認爲桌面定義和屏幕截圖將清除我的查詢。將兩列連續行分組
CREATE TABLE [dbo].[tblttt](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Work_ID] [nvarchar](max) NULL,
[From_ID] [int] NULL,
[To_ID] [int] NULL,
[Share] [float] NULL,
CONSTRAINT [PK_tblttt] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
GO
SET IDENTITY_INSERT [dbo].[tblttt] ON
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (1, N'051111Clus', 30500004, 30500005, 0.025)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (2, N'051111Clus', 30500004, 30500007, 0.025)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (3, N'051111Clus', 30500004, 30500009, 0.25)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (4, N'051111Clus', 30500004, 30500027, 0.025)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (5, N'051111Clus', 30500004, 30500029, 0.45)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (6, N'051111Clus', 30500005, 30500006, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (7, N'051111Clus', 30500007, 30500008, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (8, N'051111Clus', 30500009, 30500010, 0.6)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (9, N'051111Clus', 30500009, 30500024, 0.4)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (10, N'051111Clus', 30500010, 30500011, 0.33333333333333331)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (11, N'051111Clus', 30500010, 30500017, 0.666666666666667)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (12, N'051111Clus', 30500011, 30500012, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (13, N'051111Clus', 30500012, 30601745, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (14, N'051111Clus', 30500013, 30500014, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (15, N'051111Clus', 30500015, 30500016, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (16, N'051111Clus', 30500017, 30601746, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (17, N'051111Clus', 30500018, 30500019, 0.66666666666666663)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (18, N'051111Clus', 30500021, 30500022, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (19, N'051111Clus', 30500022, 30500023, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (20, N'051111Clus', 30500024, 30500025, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (21, N'051111Clus', 30500025, 30500026, 0.5)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (22, N'051111Clus', 30500027, 30601747, 1)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (23, N'051111Clus', 30500029, 30500030, 0.5)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (24, N'051111Clus', 30601745, 30500013, 0.5)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (25, N'051111Clus', 30601745, 30500015, 0.5)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (26, N'051111Clus', 30601746, 30500018, 0.75)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (27, N'051111Clus', 30601746, 30500021, 0.25)
GO
INSERT [dbo].[tblttt] ([ID], [Work_ID], [From_ID], [To_ID], [Share]) VALUES (28, N'051111Clus', 30601747, 30500028, 1)
GO
SET IDENTITY_INSERT [dbo].[tblttt] OFF
GO
輸出是這樣的:
從截圖作爲清楚,第一組將具有From_ID爲30500004和To_ID作爲30500005.份額的值應爲1,因爲這製成這一組的第一排。該組中的下一個條目將是具有30500005的From_ID和30500006的To_ID並且與該行共享1的行。現在,隨着與From_ID沒有行爲30500006,這組只會結束,新集團將重新啓動其From_ID爲30500004和To_ID爲30500007.
我嘗試以下,但它無處我的要求:
SELECT
TR.*
FROM tbltttT
LEFT JOIN tblttt TR
ON T.From_ID = TR.To_ID
WHERE T.work_id = '051111Clus' AND TR.work_id = '051111Clus'
那麼我該如何實現呢?
你能展示你的預期產出嗎? – SqlZim
嘗試閱讀遞歸CTE的https://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx - 這是你之後的事情嗎? – Skippy
@SqlZim我想在屏幕截圖中輸出具有新列的grp:[link](http://imgur.com/KaFxpeM)。從屏幕截圖可以看到,我將具有相同To_ID和From_ID的行放在同一組中,並在沒有找到具有與任何上一行的To_ID相同的From_ID的行時停止它。然後我增加組號。 –