如何根据某些列值对行进行分组

How to Group Rows based on some column values

我在 table 中有一个数据如下。这只是一个只有 1 个 AdmissionNo 的示例数据,真实数据可能有数百个 AdmissionNo。所以我想根据 AdmissionNo 和 WardCode 对行进行分组,这意味着 WardCode 为 'KINT' 的前 13 行的 grpValue 应该为 1,然后接下来的两行为 2,然后是 1,依此类推。

CREATE TABLE [dbo].[tbl_H](
    [AdmissionNo] [nvarchar](50) NULL,
    [WardCode] [nvarchar](255) NULL,
    [AdmissionDateTime] [datetime] NULL,
    [DischargeDateTime] [datetime] NULL,
    [date] [datetime] NULL
) ON [PRIMARY]

GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-06-29 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-06-30 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-01 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-02 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-03 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-04 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-05 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-06 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-07 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-08 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-09 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-10 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KINT', CAST(N'2016-06-29 01:59:00.000' AS DateTime), CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-11 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-12 03:38:00.000' AS DateTime), CAST(N'2016-07-11 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-11 17:44:00.000' AS DateTime), CAST(N'2016-07-12 03:38:00.000' AS DateTime), CAST(N'2016-07-12 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KEHH', CAST(N'2016-07-12 03:38:00.000' AS DateTime), CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-07-12 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-12 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-13 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-14 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-15 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-16 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-17 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-18 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-19 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-20 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-21 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-22 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-23 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-24 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-25 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-26 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-27 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-28 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-29 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-30 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-07-31 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-01 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-02 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-03 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-04 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-05 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-06 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-07 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-08 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-09 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-10 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-11 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-12 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-13 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-14 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-15 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-16 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-17 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCAR', CAST(N'2016-07-12 13:25:00.000' AS DateTime), CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-18 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 10:59:00.000' AS DateTime), CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-18 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-18 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-19 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-20 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-21 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-22 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-23 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-18 13:35:00.000' AS DateTime), CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-24 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KICA - IC', CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-26 13:23:00.000' AS DateTime), CAST(N'2016-08-24 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KICA - IC', CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-26 13:23:00.000' AS DateTime), CAST(N'2016-08-25 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KICA - IC', CAST(N'2016-08-24 18:56:00.000' AS DateTime), CAST(N'2016-08-26 13:23:00.000' AS DateTime), CAST(N'2016-08-26 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:23:00.000' AS DateTime), CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-26 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-30 15:12:00.000' AS DateTime), CAST(N'2016-08-26 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-30 15:12:00.000' AS DateTime), CAST(N'2016-08-27 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-30 15:12:00.000' AS DateTime), CAST(N'2016-08-28 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-30 15:12:00.000' AS DateTime), CAST(N'2016-08-29 00:00:00.000' AS DateTime))
GO
INSERT [dbo].[tbl_H] ([AdmissionNo], [WardCode], [AdmissionDateTime], [DischargeDateTime], [date]) VALUES (N'0000001742', N'KCH2', CAST(N'2016-08-26 13:30:00.000' AS DateTime), CAST(N'2016-08-30 15:12:00.000' AS DateTime), CAST(N'2016-08-30 00:00:00.000' AS DateTime))
GO

这是 table 的样子:

但问题是 WardCode 在后面的行中再次重复相同的 AdmissinoNo。那么我如何才能将这些行作为不同的 GroupValue,因为当我尝试对它们进行分组时,即使它们之间有任何其他 WardCode,它们也会组合在一起。这些行可以根据 AdmissionDateTime 然后 DischargeDateTime 进行排序。 首先,我通过 "ROW_NUMBER()OVER(ORDER BY AdmissionNo,AdmissionDateTime,DischargeDateTime) as rownum" 在列表中添加了 rownumber,然后进行了查询:

;WITH cte as (
SELECT *,
       ROW_NUMBER() OVER (PARTITION BY AdmissionNo,WardCode ORDER BY rownum) as rn,
       rownum - ROW_NUMBER() OVER (PARTITION BY AdmissionNo,WardCode ORDER BY rownum) as grp
FROM tbl_h
)    
SELECT *, DENSE_RANK() OVER (ORDER BY grp) as new_Grp
FROM cte

但这也将所有具有相同名称的病房代码分组,即使它们之间有任何其他病房代码。

我想这就是你想要的。

SELECT * 
FROM TABLE1 
GROUP BY AdmissinoNo,WardCode
ORDER BY AdmissinoNo,WardCode

首先按 AdmissinoNo 和 WardCode 分组 然后按 AdmissinoNo 和 WardCode

排序

我用以下查询解决了这个问题,感谢 Ajay Gupta:

;WITH cte as (
SELECT *,
   ROW_NUMBER() OVER (PARTITION BY AdmissionNo,WardCode ORDER BY rownum) as rn,
   rownum - ROW_NUMBER() OVER (PARTITION BY AdmissionNo,WardCode ORDER BY rownum) as 
grp
FROM tbl_h
)    
SELECT *, DENSE_RANK() OVER (ORDER BY grp) as new_Grp
FROM cte
ORDER BY rownum