source

선택 목록 열이 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에서 유효하지 않습니다.

factcode 2023. 4. 14. 22:11
반응형

선택 목록 열이 집계 함수 또는 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개의 쿼리에 의해 이것이 명확해지고 에러는 발생하지 않습니다.

  1. 집약 사용

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    반환:

    A T1 B1  2   922  3   68
  2. 에 컬럼 추가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

반응형