반응형
SQL Server- "집계 함수 또는 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
필드 목록을).
다음 데이터를 고려하십시오.
ID AB 1 1 13 1 1 79 1 2 13 1 2 13 12 42
쿼리
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
반환됩니다 :
T1 1 2 2 3
그것은 모두 좋고 좋습니다.
그러나 다음 (불법) 쿼리를 고려하면이 오류가 발생합니다.
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
그리고 문제를 설명하는 반환 된 데이터 세트 :
A T1 B 1 2 13? 79? 13과 79 모두 별도의 행으로? (13 + 79 = 92)? ...? 2 3 13? 42? ...?
그러나 다음 두 쿼리는이를 명확하게하며 오류를 발생시키지 않습니다.
집계 사용
SELECT A, COUNT(B) AS T1, SUM(B) AS B FROM T2 GROUP BY A
반환됩니다 :
A T1 B 1 2 92 2 3 68
GROUP BY
목록에 열 추가SELECT A, COUNT(B) AS T1, B FROM T2 GROUP BY A, B
반환됩니다 :
A T1 B 1 1 13 1 1 79 2 2 13 2 1 42
그 결과 다소 미친 것처럼 보이는 쿼리가 필요할 수 있습니다. 예 :
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 절은 쿼리 구문 분석기를 만족시키기 위해서만 존재합니다.
You can use case in update and SWAP as many as you want
update Table SET column=(case when is_row_1 then value_2 else value_1 end) where rule_to_match_swap_columns
반응형
'Nice programing' 카테고리의 다른 글
배치 파일 입력에서 후행 슬래시 제거 (0) | 2020.10.29 |
---|---|
Makefile의 $ PATH에 dir을 어떻게 추가 할 수 있습니까? (0) | 2020.10.29 |
dplyr 파이프에서 NA 제거 (0) | 2020.10.29 |
VS Code에서 기본적으로 텍스트 줄 바꿈을 설정하는 방법 (0) | 2020.10.29 |
Python 가져 오기에 대한 좋은 경험 규칙은 무엇입니까? (0) | 2020.10.29 |