Laravel MS SQL DB::RAW Query 返回"Invalid column name"



我在Laravel应用程序中使用SQL Server。我需要把这个月/年的表格分组/汇总。我的查询如下:

$positions = BelegPos::select(
DB::raw("YEAR(Datum) as year"),
DB::raw("MONTH(Datum) as month"),
DB::raw("SUM(Menge) as stunden")
)->groupBy("year", "month")
->get();

我将得到以下错误消息:

SQLSTATE[42S22]:[Microsoft][ODBC Driver 17 for SQL Server][SQL服务器]列名"year"无效。

我不知道出了什么问题,因为我构建查询的方式在MySQL服务器上运行良好。

感谢你对正确方向的任何提示。

更新

我进行了更多的研究,并阅读了一些内容,其中指出,Select语句在GROUP BY部分不可用,您必须在那里添加相同的查询。所以我的查询现在看起来是这样的:

$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) as the_year"),
DB::raw("MONTH(Datum) as the_month"),
DB::raw("SUM(Menge) as stunden")
)
->groupBy(DB::raw("YEAR(Datum) as the_year"),DB::raw("MONTH(Datum) as the_month"))
->get();

仍然不是解决方案,但错误消息已更改为:

SQLSTATE[42000]:[Microsoft][ODBC Driver 17 for SQL Server][SQLServer]关键字附近的语法不正确(SQL:selectYEAR(Datum(为_YEAR,MONTH(Datut(为_MONTH,SUM(Menge(为来自【BELEGP】的眩晕

所以我认为只有一件小事错了,但不知道是什么。

有什么想法吗?

解决方案

刚刚找到解决方案:

$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) AS year"),
DB::raw("MONTH(Datum) AS month"),
DB::raw("SUM(Menge) AS stunden")
)
->groupBy(DB::raw("YEAR([Datum])"),DB::raw("MONTH([Datum])"))
->get();

事实上,GROUPBY子句中并没有不可用的动态值名称(年和月(,相反,您必须再次调用DB::raw,但现在没有再次生成关键字。

感谢大家的支持!

最新更新