Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 从其他表列检索记录_Sql_Sql Server - Fatal编程技术网

Sql 从其他表列检索记录

Sql 从其他表列检索记录,sql,sql-server,Sql,Sql Server,我创建了一个视图,其中有多个列。我需要从外部表中检索一些数据。 当我执行查询时,它出现了以下错误 “列'cte4.roadCrossSection1'在选择列表中无效,因为” 它既不包含在聚合函数中,也不包含在GROUP BY中 条款。” 这是添加其他groupby语句后的结果。正确的记录是sumRoadLength的较小值。您还需要根据道路横断面1进行分组 SELECT roadName, roadCrossSection1, sum(roadLength)

我创建了一个视图,其中有多个列。我需要从外部表中检索一些数据。

当我执行查询时,它出现了以下错误

“列'cte4.roadCrossSection1'在选择列表中无效,因为” 它既不包含在聚合函数中,也不包含在GROUP BY中 条款。”


这是添加其他groupby语句后的结果。正确的记录是sumRoadLength的较小值。

您还需要根据
道路横断面1
进行分组

SELECT roadName, roadCrossSection1,
               sum(roadLength) as sumRoadLength
FROM cte4 
group by roadName, roadCrossSection1
order by roadName, roadCrossSection1
已更新

SELECT roadName, sum(roadLength) as sumRoadLength
FROM cte4 
group by roadName 
order by roadName

您还需要按
道路横断面1
进行分组

SELECT roadName, roadCrossSection1,
               sum(roadLength) as sumRoadLength
FROM cte4 
group by roadName, roadCrossSection1
order by roadName, roadCrossSection1
已更新

SELECT roadName, sum(roadLength) as sumRoadLength
FROM cte4 
group by roadName 
order by roadName

错误表示,如果要在select子句中使用ROADCROSSECTION1,则必须应用任何聚合函数,例如MIN、Max、Sum、,roadCrossSection1上的平均值,或者您必须将其放入group by子句中,因为roadCrossSection1可能有多个值用于相同的道路名称,但同时您通过调用roadLength上的聚合函数,仅计算一个roadLength值聚合函数,例如roadCrossSection1上的最小值、最大值、总和、平均值,或者您必须将其放入group by子句中,因为roadCrossSection1可能对同一道路名称有多个值,但同时您通过在注释中调用roadLength上的聚合函数,仅对roadLength的一个值进行评估:

我观察到正确的结果应该是 roadName记录和那些不是空值的值

我认为您需要条件聚合:

SELECT roadName,
  sum(case when roadCrossSection1 is not null then roadLength end) as sumRoadLength,
  max(roadCrossSection1) roadCrossSection1
FROM cte4 
group by roadName
order by roadName
根据您的评论:

我观察到正确的结果应该是 roadName记录和那些不是空值的值

我认为您需要条件聚合:

SELECT roadName,
  sum(case when roadCrossSection1 is not null then roadLength end) as sumRoadLength,
  max(roadCrossSection1) roadCrossSection1
FROM cte4 
group by roadName
order by roadName

我尝试了你提出的解决方案,它有效,但会创建重复记录。最初我有442行,但在应用额外的groupby之后,它变成了884行,其中其他记录为空。第二张记录的结果是正确的。请拍摄一张图像结果,然后给我。可能,
roadcrosssection 1
roadName
的值不同。接下来,来自dbo的
cte4
无条件地加入了
。roadSectionAndPavementUserData,cte3
cte3表是什么样子的?我在最初的问题中发布了最近结果的图像。我观察到正确的结果应该是roadName记录中的较小值和非空值。您需要删除
roadCrossSection1
。我尝试了您提出的解决方案,它有效,但会创建重复记录。最初我有442行,但在应用额外的groupby之后,它变成了884行,其中其他记录为空。第二张记录的结果是正确的。请拍摄一张图像结果,然后给我。可能,
roadcrosssection 1
roadName
的值不同。接下来,来自dbo的
cte4
无条件地加入了
。roadSectionAndPavementUserData,cte3
cte3表是什么样子的?我在最初的问题中发布了最近结果的图像。我注意到正确的结果应该是roadName记录中的较小值和非空值。您需要删除
roadCrossSection1