multiple from columns sql-server group-by

sql-server - from - sql group by count



SQL Server-Columna "no válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY" (2)

En otras palabras, este error le indica que SQL Server no sabe qué B seleccionar del grupo.

O desea seleccionar un valor específico (por ejemplo, MIN , SUM o AVG ) en cuyo caso usaría la función de agregado apropiada, o si desea seleccionar cada valor como una nueva fila (es decir, incluyendo B en la lista de campos GROUP BY )

Considere los siguientes datos:

ID A B 1 1 13 1 1 79 1 2 13 1 2 13 1 2 42

La consulta

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

volvería:

A T1 1 2 2 3

Esto es bueno y fabuloso.

Sin embargo, considere la siguiente consulta (ilegal), que produciría este error:

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

Y su conjunto de datos devueltos que ilustra el problema:

A T1 B 1 2 13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...? 2 3 13? 42? ...?

Sin embargo, las dos consultas siguientes lo aclaran y no provocarán el error:

  1. Usando un agregado

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

    volvería:

    A T1 B 1 2 92 2 3 68

  2. Agregar la columna a la lista GROUP BY

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

    volvería:

    A T1 B 1 1 13 1 1 79 2 2 13 2 1 42

Me gustaría mostrar la columna B en mi SQL debajo, pero cuando lo agrego a la consulta me da el siguiente error:

La columna T2.B ''no es válida en la lista de selección porque no está contenida ni en una función de agregado ni en la cláusula GROUP BY.

Mi código:

SELECT A, COUNT(B) as T1, B FROM T2 WHERE ID=1 GROUP BY A


La consecuencia de esto es que puede necesitar una consulta de aspecto bastante loco, por ejemplo,

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]

Como la tabla principal es una tabla de resumen, su clave principal maneja la única agrupación u orden que es realmente necesaria. Por lo tanto, la cláusula GROUP BY existe únicamente para satisfacer el analizador de consultas.