【问题标题】:How to Group Rows based on some column values如何根据某些列值对行进行分组
【发布时间】:2024-04-28 19:30:01
【问题描述】:

我在表格中有如下数据。这只是一个只有1个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

这是表格的外观:

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

;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即可查看

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

感谢 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

【讨论】:

    【解决方案2】:

    我想这就是你想要的。

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

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

    【讨论】:

    • 感谢您的回复,但是如果您查看图像,它将14,15和17,18等组合在一起,这就是我不想要的,因为第16行有不同的wardcode。所以第 14 行和第 15 行应该有不同的 groupvalue 和 17,18 等行应该有不同的 groupvalue。