선택 목록 열이 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에서 유효하지 않습니다.
컬럼을 표시하고 싶다B
아래 SQL에 있는데 쿼리에 추가하면 다음과 같은 오류가 나타납니다.
열 T2.B'는 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에서 유효하지 않습니다.
내 코드:
SELECT A, COUNT(B) as T1, B
FROM T2
WHERE ID=1
GROUP BY A
바꿔 말하면, 이 오류는 SQL Server가 어떤 것을 알 수 없음을 나타냅니다. B
그룹에서 선택합니다.
하나의 특정 값을 선택할 수 있습니다(예:MIN
,SUM
, 또는AVG
이 경우 적절한 집계 함수를 사용하거나 모든 값을 새 행(즉, 다음을 포함)으로 선택합니다.B
에서GROUP BY
를 참조해 주세요.
다음 데이터를 고려합니다.
아이디 A B1 1 131 1 791 2 131 2 131 2 42
쿼리
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
반환:
A T11 22 3
그건 다 좋은 일이야.
단, 다음 (불법) 쿼리를 고려하면 이 오류가 발생합니다.
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
문제를 나타내는 데이터 세트도 반환되었습니다.
A T1 B12 13? 79? 13과 79 둘 다 다른 행으로? (13+79=92)? ...? 2 3 13? 42? ...?
단, 다음 2개의 쿼리에 의해 이것이 명확해지고 에러는 발생하지 않습니다.
집약 사용
SELECT A, COUNT(B) AS T1, SUM(B) AS B FROM T2 GROUP BY A
반환:
A T1 B1 2 922 3 68
에 컬럼 추가
GROUP BY
목록.SELECT A, COUNT(B) AS T1, B FROM T2 GROUP BY A, B
반환:
A T1 B1 1 131 1 792 2 132 1 42
업데이트 및 스왑에서 사례를 원하는 만큼 사용할 수 있습니다.
update Table SET column=(case when is_row_1 then value_2 else value_1 end) where rule_to_match_swap_columns
다음과 같이 그룹에 열을 추가합니다.
SELECT A, COUNT(B) as T1, B
FROM T2
WHERE ID=1
GROUP BY A,B
그 결과, 다음과 같은 다소 미친 듯한 질문이 필요할 수 있습니다.
SELECT [dbo].[tblTimeSheetExportFiles].[lngRecordID] AS lngRecordID
,[dbo].[tblTimeSheetExportFiles].[vcrSourceWorkbookName] AS vcrSourceWorkbookName
,[dbo].[tblTimeSheetExportFiles].[vcrImportFileName] AS vcrImportFileName
,[dbo].[tblTimeSheetExportFiles].[dtmLastWriteTime] AS dtmLastWriteTime
,[dbo].[tblTimeSheetExportFiles].[lngNRecords] AS lngNRecords
,[dbo].[tblTimeSheetExportFiles].[lngSizeOnDisk] AS lngSizeOnDisk
,[dbo].[tblTimeSheetExportFiles].[lngLastIdentity] AS lngLastIdentity
,[dbo].[tblTimeSheetExportFiles].[dtmImportCompletedTime] AS dtmImportCompletedTime
,MIN ( [tblTimeRecords].[dtmActivity_Date] ) AS dtmPeriodFirstWorkDate
,MAX ( [tblTimeRecords].[dtmActivity_Date] ) AS dtmPeriodLastWorkDate
,SUM ( [tblTimeRecords].[decMan_Hours_Actual] ) AS decHoursWorked
,SUM ( [tblTimeRecords].[decAdjusted_Hours] ) AS decHoursBilled
FROM [dbo].[tblTimeSheetExportFiles]
LEFT JOIN [dbo].[tblTimeRecords]
ON [dbo].[tblTimeSheetExportFiles].[lngRecordID] = [dbo].[tblTimeRecords].[lngTimeSheetExportFile]
GROUP BY [dbo].[tblTimeSheetExportFiles].[lngRecordID]
,[dbo].[tblTimeSheetExportFiles].[vcrSourceWorkbookName]
,[dbo].[tblTimeSheetExportFiles].[vcrImportFileName]
,[dbo].[tblTimeSheetExportFiles].[dtmLastWriteTime]
,[dbo].[tblTimeSheetExportFiles].[lngNRecords]
,[dbo].[tblTimeSheetExportFiles].[lngSizeOnDisk]
,[dbo].[tblTimeSheetExportFiles].[lngLastIdentity]
,[dbo].[tblTimeSheetExportFiles].[dtmImportCompletedTime]
프라이머리 테이블은 요약 테이블이기 때문에 프라이머리 키는 진정으로 필요한 그룹화 또는 순서만 처리합니다.따라서 GROUP BY 절은 쿼리 파서를 만족시키기 위해서만 존재합니다.
쿼리 실행 시 오류에 언급된 각 그룹별 조항을 추가하여 이 문제를 해결했습니다.
예: 에러에 다음과 같은 메시지가 표시되도록 합니다.
Column 'table.dealer' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
그런 다음 'group by' 절에 다음과 같이 table.dealer 열을 추가했습니다.
Group by table.dealer
그게 내 문제를 해결해준다.
groupBy를 사용하여 필드 값을 카운트하려면 다음 코드를 속편에 사용할 수 있습니다.Table.count( { attributes: ['column'], group: 'column', }
그러면 "집약함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에 선택 목록에서 유효하지 않습니다."라는 오류가 해결됩니다.
언급URL : https://stackoverflow.com/questions/18258704/column-invalid-in-the-select-list-because-it-is-not-contained-in-either-an-aggr
'source' 카테고리의 다른 글
SQL Server의 Group By, Having 및 Where 절 실행 시퀀스 (0) | 2023.04.14 |
---|---|
Swift의 'open' 키워드는 무엇입니까? (0) | 2023.04.14 |
#pragma 마크의 의미는 무엇입니까?#pragma 마크가 필요한 이유는 무엇입니까? (0) | 2023.04.14 |
Objective-C 코드를 유닛 테스트하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.14 |
C#의 문자열 앞에 있는 @는 무엇입니까? (0) | 2023.04.14 |