【发布时间】:2011-06-20 13:53:26
【问题描述】:
SQL distinct for 2 fields in a database
我相信上面的链接离我要找的不远。有一个帖子谈论我认为我需要什么。它说我应该让我的字段在聚合中不需要不同,然后我想要不同的字段应该在 group by 子句中。
以下我没有编写的 SQL 用于返回我们想要的数据。我添加了一行:group by pf.PatientID, pf.SubjectID
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[getResearchAssistantProgressReportByStudyAndLoation]
(
@StudyId int,
@LocationID int,
@ResearchAssistantID int,
@StartDate datetime,
@EndDate datetime
)
RETURNS TABLE
AS
RETURN
(
Select
pf.PatientID, pf.SubjectID, pf.ResearchAssistantID,
study.form, pf.dateAvailable, pf.DateComplete,
CAST((CASE WHEN pf.dateavailable + convert(int,study.daystoexpire,101) < GETDATE() and pf.dateComplete is null then 'True' else 'False' END) AS varchar(10)) as Expired
FROM
PatientForms pf
INNER JOIN (SELECT * FROM getFormsINStudy(@StudyId)) as study
on pf.formID = study.FormID
INNER JOIN UserLocations ul on pf.patientid = ul.userid
WHERE
ul.LocationID = @LocationID
and (ResearchAssistantID = @ResearchAssistantID or @ResearchAssistantID = -1)
and (pf.DateAvailable + convert(int,study.daystoexpire,101)) > @StartDate
and (pf.DateAvailable + convert(int,study.DAYSTOEXPIRE,101)) < @EndDate
group by pf.PatientID, pf.SubjectID
)
这给了我一个错误:
Msg 8120, Level 16, State 1, Procedure getResearchAssistantProgressReportByStudyAndLoation, Line 20
Column 'PatientForms.ResearchAssistantID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我明白为什么会出现此错误,它不在聚合函数中。我不知道该怎么做是将它汇总,据我所知,这会改变我的查询结果。
非常感谢任何人能够并愿意提供的任何帮助!
【问题讨论】:
-
当然添加聚合会改变结果,但添加
group by已经改变了它。如果您不想更改结果,请不要更改查询,如果您确实想更改它,您应该更好地解释结果现在的外观以及您希望它的外观。最好有一个简短的样本。 -
同意,您想通过添加 GROUP BY 语句来达到什么目的?在什么情况下,您会获得多条记录,而您只需要/期望一条记录?