/ / SQL Виділена і невизначена виділення стовпців - sql, select, distinct

SQL Відмінний та невизначений вибір стовпця - sql, select, distinct

SQL відрізняється для 2 полів бази даних

Наведена вище посилання, я вважаю, не надто далеко від чогоЯ "шукаю. Був пост говорити про те, що я вважаю, що мені потрібно. Вона говорить, що я повинен мати мої поля, які не повинні бути різними в сукупності, а потім ті, які я хочу чітко повинні бути в групі за пропозицією .

Наступний SQL, який я НЕ пишу, працює для того, щоб повернути нам потрібні дані. Я додав рядок: групу 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.

Я розумію, чому я маю цю помилку, це не в сукупності функції.

Будь-яка допомога будь-хто може і готовий запропонувати дуже цінується!

Відповіді:

1 для відповіді № 1

Що б ви не мали у виборі оператора, що не є сукупністю, також повинно з'являтися в групі за областю. Якщо у вас є

 Select A, B , C , D = Sum (E) From Table
Group By A, B, C

Зверніть увагу на те, що це не зводиться до групи за територією. pf.ResearchAssistantID має бути в групі за пунктом. І вона повинна працювати нормально.


0 для відповіді № 2

Ви повинні згрупувати за всіма пунктами у виборісписок, який не є сукупним. Це "фундаментальний SQl, як реалізований майже в кожній базі даних, крім mySQL. Якщо у вас немає поля в групі і значення для двох записів різні, як би він знав, який з них ввести в результуючий набір?" Ви повинні вказати, який саме ви хочете. Єдиним вашим вибором є: Включіть інше поле в групі Укажіть, використовуючи сукупність, яке значення потрібно вибрати. Зазвичай люди використовують min () або max ().

Навіть у mySQl ви повинні використовувати підхід aggreagate або додати їх до групи, оскільки в іншому випадку вибере значення для вас, і це може бути не те, що вам потрібно.