/ / SQL Výrazný a neurčitý výber stĺpcov - sql, select, distinct

SQL Výrazný a neurčitý výber stĺpcov - sql, select, distinct

SQL odlišný pre 2 polia v databáze

Uvedený odkaz verím, že nie je ďaleko od toho, čoHľadal som tam bol príspevok hovoriť o tom, čo som presvedčený, že potrebujem.To hovorí, že by som mal mať svoje polia, ktoré nemusia byť odlišné v agregáte a potom tie, ktoré chcem oddelené by mali byť v skupine podľa klauzuly ,

Nasledujúce SQL, ktorý som nepísal pracuje na to, aby sme nám dali späť údaje, ktoré chceme. Pridal som riadok: skupina podľa 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
)

Toto mi dáva chybu:

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.

Chápem, prečo mám túto chybu, nie je v agregátnej funkcii. Čo si nie som istá, ako urobiť, je dostať to celkom, že podľa môjho vedomia by zmenilo výsledky môjho dotazu.

Každá pomoc, ktorú môže a je ochotná ponúknuť, je veľmi ocenená!

odpovede:

1 pre odpoveď č. 1

Čokoľvek máte vo vybranom výkaze, ktorý nie je agregát, by sa mal zobraziť aj v skupine podľa oblasti. Ak máte

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

Všimnite si, čo nie je agregované, skončí v skupine podľa oblasti, pf.ResearchAssistantID musí byť v doložke skupiny podľa. A malo by to fungovať dobre.


0 pre odpoveď č. 2

Musíte zoskupiť podľa všetkého vo výberezoznam, ktorý nie je súhrnný. To je základný SQl ako implementovaný v takmer každej databáze okrem mySQL.Ak nemáte pole v skupine a hodnoty pre dve záznamy sú iné, ako by vedel, ktorý z nich vložiť do výsledkovej množiny? Musíte zadať, ktorý z nich chcete. Vaše jediné možnosti sú: Zahrňte ďalšie pole do skupiny podľa Zadajte pomocou agregátu, ktorú hodnotu chcete vybrať. Zvyčajne ľudia používajú min () alebo max ().

Dokonca aj v mySQl by ste mali použiť prístup aggreagate alebo ich pridať do skupiny, pretože inak vám vyberie hodnotu a nemusí to byť tá, ktorú potrebujete.