La columna 'dbo.User.FB_UserId' no es válida en la list de selección porque no está contenida ni en una function de agregado ni en la cláusula GROUP BY

Vi este post de error muchas veces aquí, pero no obtengo la solución para mi problema específico (probablemente porque no soy un experto en sql), así que por favor, perdónenme por publicar una pregunta al mismo nivel. error.

Esta es la consulta que bash ejecutar:

SELECT DISTINCT U.FB_UserId , U.Id AS GameUserID , U.FbLocale , U.FbGender , U.FbBirthday , U.RegistnetworkingAt , U.LoginCount , U.PlayCount , U.MarketGroupId , (SELECT COUNT(C.PriceFbCnetworkingits) WHERE UserID = U.Id) AS Payments , (SELECT SUM(CASE WHEN C.PriceFbCnetworkingits = 13 THEN 1 END) WHERE UserID = U.Id) AS P13 , (SELECT SUM(CASE WHEN C.PriceFbCnetworkingits = 52 THEN 1 END) WHERE UserID = U.Id) AS P52 , (SELECT SUM(CASE WHEN C.PriceFbCnetworkingits = 130 THEN 1 END) WHERE UserID = U.Id) AS P130 FROM [dbo].[User] AS U WITH (NOLOCK) INNER JOIN [dbo].[FbCnetworkingitsCallback] AS C WITH (NOLOCK) ON C.UserId = U.Id 

Si lo hago, obtengo el post de error. De acuerdo, sé lo que significa y entiendo qué hacer, pero creo que si lo hago no me da el resultado que quiero … Quiero algunos datos para un userid específico. algunos de los datos deben ser sumdos, algunos de ellos deben ser contados y en la list de resultados cada identificación debe aparecer solo una vez.

Ahora aquí está lo gracioso (para mí). Si escribo las consultas SELECT internas así, no obtendré el error. Pero no sé si los datos devueltos son correctos:

 , (SELECT COUNT(PriceFbCnetworkingits) FROM [dbo].[FbCnetworkingitsCallback] WHERE UserID = U.Id) AS Payments 

… Para ser sincero, perdí la pista y espero algo de ayuda.

a continuación, verá la syntax correcta de SQL Server al usar la agrupación para realizar funciones de agregación.

su WHERE UserID = U.Id no es necesario en absoluto ya que lo está haciendo como parte de la cláusula INNER JOIN .

Entonces intente esto:

 SELECT DISTINCT U.FB_UserId , U.Id AS GameUserID , U.FbLocale , U.FbGender , U.FbBirthday , U.RegistnetworkingAt , U.LoginCount , U.PlayCount , U.MarketGroupId , COUNT(*) AS Payments , SUM(CASE WHEN C.PriceFbCnetworkingits = 13 THEN 1 ELSE 0 END) AS P13 , SUM(CASE WHEN C.PriceFbCnetworkingits = 52 THEN 1 ELSE 0 END) AS P52 , SUM(CASE WHEN C.PriceFbCnetworkingits = 130 THEN 1 ELSE 0 END) AS P130 FROM [dbo].[User] AS U WITH (NOLOCK) INNER JOIN [dbo].[FbCnetworkingitsCallback] AS C WITH (NOLOCK) ON C.UserId = U.Id GROUP BY U.FB_UserId , U.Id , U.FbLocale , U.FbGender , U.FbBirthday , U.RegistnetworkingAt , U.LoginCount , U.PlayCount , U.MarketGroupId 

como escribiste

no soy un experto en sql

A partir de ahora, evite usar WITH (NOLOCK), es lo mismo que si le pidiera SELECT [data] FROM [TABLE] WITH(I really, really don't care if it is accurate or not)

hay razones para hacerlo en algunos casos, pero si eres un principiante con SQL dudo que estés en tal situación.

Si no usa GROUP BY, entonces habrá un conflicto con la integridad en la selección

ex para una persona debe tener sum o count cuando no incluye esa (persona) entonces ¿para qué espera una sum para