Select 3 个不同的列 return 5 个列
Select 3 Distinct columns return 5 columns
SELECT DoctorId, Plan, StartDate, EndDate,Status
From DoctorContracts
在 DoctorContracts
Table 中我需要 Distinct doctorid
、plan
和 StartDate
但我需要得到 Status
和 Enddate
但是有一个组列是 CA 或 NH。我需要 CA 或 NH 之间的最小开始日期。
示例
DOCTORID. PLAN. STARTDATE. ENDATE. STATUS. GROUP
9978. Abc. 11/2/2010. 11/2/2015. Z. CA
9978. Abc. 11/2/2013. 11/2/2015. N. NH
9978. Xxx. 12/3/2011. 12/3/2015. Z. CA
9978. Xxx. 10/3/2001. 12/6/2015. Z. NH
我使用ROW_NUMBER
函数https://msdn.microsoft.com/en-us/library/ms186734.aspx:
您的 SQL 应该是这样的:
SELECT DISTINCT d.[DoctorId]
, d.[Plan]
, d.[StartDate]
, d.[EndDate]
, d.[Status]
FROM DoctorContracts as d
INNER JOIN
(SELECT [GROUP]
, [STARTDATE]
, ROW_NUMBER() OVER(PARTITION BY [GROUP] ORDER BY [STARTDATE] ASC) AS Row
FROM DoctorContracts) as t
ON d.[GROUP] = t.[GROUP]
AND d.[STARTDATE] = t.[STARTDATE]
AND t.[Row] = 1
您根据按组划分的最小日期创建一个子集,然后过滤到最早的日期。
我已经在 SSMS 中测试过,它按要求工作。
SELECT DoctorId, Plan, StartDate, EndDate,Status
From DoctorContracts
在 DoctorContracts
Table 中我需要 Distinct doctorid
、plan
和 StartDate
但我需要得到 Status
和 Enddate
但是有一个组列是 CA 或 NH。我需要 CA 或 NH 之间的最小开始日期。
示例
DOCTORID. PLAN. STARTDATE. ENDATE. STATUS. GROUP
9978. Abc. 11/2/2010. 11/2/2015. Z. CA
9978. Abc. 11/2/2013. 11/2/2015. N. NH
9978. Xxx. 12/3/2011. 12/3/2015. Z. CA
9978. Xxx. 10/3/2001. 12/6/2015. Z. NH
我使用ROW_NUMBER
函数https://msdn.microsoft.com/en-us/library/ms186734.aspx:
您的 SQL 应该是这样的:
SELECT DISTINCT d.[DoctorId]
, d.[Plan]
, d.[StartDate]
, d.[EndDate]
, d.[Status]
FROM DoctorContracts as d
INNER JOIN
(SELECT [GROUP]
, [STARTDATE]
, ROW_NUMBER() OVER(PARTITION BY [GROUP] ORDER BY [STARTDATE] ASC) AS Row
FROM DoctorContracts) as t
ON d.[GROUP] = t.[GROUP]
AND d.[STARTDATE] = t.[STARTDATE]
AND t.[Row] = 1
您根据按组划分的最小日期创建一个子集,然后过滤到最早的日期。
我已经在 SSMS 中测试过,它按要求工作。