sql-server - Laravel MS SQL DB::RAW 查询返回“无效的列名”
问题描述
我在我的 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 Server]列名“年”无效。
我不知道出了什么问题,因为我构建它的查询方式适用于 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][SQL Server]关键字附近的语法错误(SQL:select YEAR(Datum) as the_year, MONTH(Datum) as the_month, SUM(Menge) as stunden from [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 但现在无需再次生成关键字。
谢谢大家的支持!
推荐阅读
- php - 如何获取网站的元属性并将值存储到变量中?
- colors - 是否有数字是彩色的 MNIST 数据集?
- spring-boot - 使用 pom.xml 禁用声纳规则?
- java - 具有可分页功能的 Spring 数据 jpa 自定义存储库
- excel - 转换为日期格式
- c# - 使用来自 db 的现有实体创建一个实体
- ios - 使用唯一标识符填充结构数组
- javascript - 如何在 React.js 中加载本地 JavaScript 文件?
- react-native - 从下拉列表或选择器中选择时禁用键盘以响应本机?
- android-constraintlayout - 如何链接 MotionLayout 动画