Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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,此查询不起作用的原因:- SELECT b.byhub, Count(awbno) FROM (SELECT awbno, byhub, entrydatetime, Max(entrydatetime) FROM wbbooking GROUP BY awbno, byhub,

此查询不起作用的原因:-

SELECT b.byhub, 
       Count(awbno) 
FROM   (SELECT awbno, 
               byhub, 
               entrydatetime, 
               Max(entrydatetime) 
        FROM   wbbooking 
        GROUP  BY awbno, 
                  byhub, 
                  entrydatetime) B 
       INNER JOIN (SELECT refno, 
                          Max(entrydatetime) 
                   FROM   wbmmreceiving 
                   GROUP  BY refno) R 
               ON B.awbno = R.refno 
WHERE  CONVERT(DATE, b.entrydatetime) BETWEEN '2016-10-13' AND '2016-10-13' 
GROUP  BY b.byhub 
Msg 8155, Level 16, State 2, Line 2
No column name was specified for column 4 of 'b'.
Msg 8155, Level 16, State 2, Line 3
No column name was specified for column 2 of 'r'.
执行此查询后,我获得了此类错误:-

SELECT b.byhub, 
       Count(awbno) 
FROM   (SELECT awbno, 
               byhub, 
               entrydatetime, 
               Max(entrydatetime) 
        FROM   wbbooking 
        GROUP  BY awbno, 
                  byhub, 
                  entrydatetime) B 
       INNER JOIN (SELECT refno, 
                          Max(entrydatetime) 
                   FROM   wbmmreceiving 
                   GROUP  BY refno) R 
               ON B.awbno = R.refno 
WHERE  CONVERT(DATE, b.entrydatetime) BETWEEN '2016-10-13' AND '2016-10-13' 
GROUP  BY b.byhub 
Msg 8155, Level 16, State 2, Line 2
No column name was specified for column 4 of 'b'.
Msg 8155, Level 16, State 2, Line 3
No column name was specified for column 2 of 'r'.

只需为子查询指定列名,如下所示:

SELECT b.byhub, 
       Count(awbno) 
FROM   (SELECT awbno, 
               byhub, 
               entrydatetime, 
               Max(entrydatetime) max_entrydatetime
        FROM   wbbooking 
        GROUP  BY awbno, 
                  byhub, 
                  entrydatetime) B 
       INNER JOIN (SELECT refno, 
                          Max(entrydatetime) max_entrydatetime
                   FROM   wbmmreceiving 
                   GROUP  BY refno) R 
               ON B.awbno = R.refno 
WHERE  CONVERT(DATE, b.entrydatetime) BETWEEN '2016-10-13' AND '2016-10-13' 
GROUP  BY b.byhub 

出现错误的原因是您没有为聚合列
Max(entrydatetime)
指定名称。将其更改为Max\u entrydatetime
Max(entrydatetime)

这个问题有点奇怪。子查询
B
选择
entrydatetime
以及
Max(entrydatetime)
。但是由于
entrydatetime
包含在分组依据列表中,因此
Max(entrydatetime)
将始终与
entrydatetime
相同

如果希望最后一个
entrydatetime
per
awbno
byhub
,则不要按
entrydatetime
分组,只将其作为
Max(entrydatetime)
包含在选择列表中。如果确实要按此日期列分组,则不要将其作为
Max(entrydatetime)
包含

第二个子查询的目的是什么?其返回的列中没有一个用于联接。伯爵需要吗


为什么在外部查询中包含where子句?如果将其包含在第一个子查询中,则效率更高,
entrydatetime
列不再需要返回。

您使用的SQL引擎是什么?它区分大小写吗?B对B?由于您按
entrydatetime
分组,您希望
Max(entrydatetime)
产生什么结果?您的查询似乎比需要的复杂。请显示wbbooking和wbmmreceiving表的说明