从多列中选择时如何在一列中使用 DISTINCT
How to use DISTINCT in one column when SELECTING from many columns
我正在尝试 select 来自两个不同视图的列,但我只想在一个特定列上使用 DISTINCT 语句。我认为使用 GROUP BY 语句会起作用,但它会引发错误。
SELECT DISTINCT
[Act].[ClientId]
, [Ref].[Agency]
, [Act].[FundCode]
, [Act].[VService]
, [Act].[Service]
, [Act].[Attended]
, [Act].[StartDate]
FROM [dbo].[FS_v_CrossReference_ALL] AS [Ref]
INNER JOIN [dbo].[FS_v_Activities] AS [Act] ON [Ref].[VendorId] = [Act].[VendorId]
WHERE [Act].[StartDate] BETWEEN '1/1/2015' AND '12/31/2015'
GROUP BY [Act].[ClientId]
我想在 [Act].[ClientId]
上使用 DISTINCT 语句。有什么办法吗?
据推测,您想要 row_number()
:
SELECT ar.*
FROM (SELECT Act.*, Reg.Agency,
ROW_NUMBER() OVER (PARTITION BY Act.ClientId ORDER BY ACT.StartDate DESC) as seqnum
FROM [dbo].[FS_v_CrossReference_ALL] [Ref] JOIN
[dbo].[FS_v_Activities] Act
ON [Ref].[VendorId] = [Act].[VendorId]
WHERE [Act].[StartDate] >= '2015-01-01' AND
[Act].[StartDate] < '2016-01-01'
) ar
WHERE seqnum = 1;
特别注意日期比较的变化:
- 日期采用标准格式(YYYY-MM-DD 或 YYYYMMDD)。
BETWEEN
被两个不等式代替。如果日期确实是带有时间分量的 date/time,这会使代码健壮。
我正在尝试 select 来自两个不同视图的列,但我只想在一个特定列上使用 DISTINCT 语句。我认为使用 GROUP BY 语句会起作用,但它会引发错误。
SELECT DISTINCT
[Act].[ClientId]
, [Ref].[Agency]
, [Act].[FundCode]
, [Act].[VService]
, [Act].[Service]
, [Act].[Attended]
, [Act].[StartDate]
FROM [dbo].[FS_v_CrossReference_ALL] AS [Ref]
INNER JOIN [dbo].[FS_v_Activities] AS [Act] ON [Ref].[VendorId] = [Act].[VendorId]
WHERE [Act].[StartDate] BETWEEN '1/1/2015' AND '12/31/2015'
GROUP BY [Act].[ClientId]
我想在 [Act].[ClientId]
上使用 DISTINCT 语句。有什么办法吗?
据推测,您想要 row_number()
:
SELECT ar.*
FROM (SELECT Act.*, Reg.Agency,
ROW_NUMBER() OVER (PARTITION BY Act.ClientId ORDER BY ACT.StartDate DESC) as seqnum
FROM [dbo].[FS_v_CrossReference_ALL] [Ref] JOIN
[dbo].[FS_v_Activities] Act
ON [Ref].[VendorId] = [Act].[VendorId]
WHERE [Act].[StartDate] >= '2015-01-01' AND
[Act].[StartDate] < '2016-01-01'
) ar
WHERE seqnum = 1;
特别注意日期比较的变化:
- 日期采用标准格式(YYYY-MM-DD 或 YYYYMMDD)。
BETWEEN
被两个不等式代替。如果日期确实是带有时间分量的 date/time,这会使代码健壮。