Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中_Sql_Sql Server_Group By - Fatal编程技术网

Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,group-by,Sql,Sql Server,Group By,我试着选择一组有他们单位和部门的患者,我想按单位名称对结果进行分组,但是这段代码没有执行,并且给出了错误作为这个问题的主题 SELECT TOP (100) PERCENT Pat.PatName AS Name, srvDiv.sgMType AS Perkhidmatan, Pat.PatMRank AS Pangkat, Pat.PatMilitaryID AS [No# Tentera], unt.untName AS Unit, f

我试着选择一组有他们单位和部门的患者,我想按单位名称对结果进行分组,但是这段代码没有执行,并且给出了错误作为这个问题的主题

SELECT TOP (100) PERCENT 
    Pat.PatName AS Name, 
    srvDiv.sgMType AS Perkhidmatan,
    Pat.PatMRank AS Pangkat, 
    Pat.PatMilitaryID AS [No# Tentera],
    unt.untName AS Unit,
    fct.pesStatusCode as StatusCode,
    fct.pesSignedDate AS SignedDate

FROM dbo.FactPES AS fct INNER JOIN 
    dbo.DimPatient AS Pat ON fct.pesPatID = Pat.PatID LEFT OUTER JOIN
    dbo.DimUnit AS unt ON fct.pesUnitID = unt.untID LEFT OUTER JOIN 
    dbo.DimServiceDiv AS srvDiv ON fct.pesServiceDivID = srvDiv.sgID 
GROUP BY unt.untName
HAVING (deas.diDate BETWEEN  
    CONVERT(DATETIME, @FromDate, 102) 
AND 
    CONVERT(DATETIME, @ToDate, 102))
我想这是因为unt.UntName在我的左连接中,所以我不能在连接之外使用它,也许?我有点困惑,因为当我这样说时,它是有效的:

GROUP BY unt.untName, Pat.PatName, srvDiv.sgMType, 
    Pat.PatMRank, Pat.PatMilitaryID, unt.untName, 
    fct.pesStatusCode, fct.pesSignedDate

无论何时使用“分组依据”

,我们都非常感谢您的帮助-它应该作为一列出现在
选择
语句中。如果您不想将其包含在
分组中,请将其用作
中的
聚合列,然后选择

因此,在您的案例中,您问题中所述的第二个
分组将起作用


阅读此文章了解更多关于的信息。首先,请不要使用
TOP(100%)
;甚至看书都会痛

其次,您的查询不包含聚合函数,例如,不包含
SUM
COUNT
。当你说你想“按单元名分组”时,我怀疑你可能只是想让结果按单元名排序。在这种情况下,您需要的是按
排序。(其他人的建议是研究
groupby
的作用。)


最后,根据您的DBMS,您可能不需要在最后使用那些
CONVERT
函数

“我想按单元名称对结果进行分组”-我认为您没有理解
groupby
在SQL中的作用:这意味着您将只为每个唯一的分组值返回一行-因此,如果按单元名称分组,则无论有多少患者属于该单元,每个单元只会得到一行。你到底想做什么?