mysql - 存储过程中查询的未知列错误 (1054),在查询窗口中工作
问题描述
我在 MySQL 中有一个奇怪的问题。我写了一个查询,将跨国数据聚合成每小时的数据块。该查询在 Workbench 查询窗口中运行良好。然后,我将查询实现为存储过程,并收到“错误代码:1054。“字段列表”中的未知列“d.SiteId”消息。
SELECT `d`.`SiteId`, `d`.`TransactionDate`, (`d`.`TimeGrouping` * 10000) as 'HourEndTime', Sum(`d`.`SalesAmount`) as 'TotalSales', count(`d`.`PosTransactionId`) as 'TransactionCount', Sum(`d`.`ItemCount`) as 'ItemCount', `d`.`Currency`
FROM (SELECT DISTINCT `SiteId`, `TransactionDate`, `TimeGrouping`, `SalesAmount`, `PosTransactionId`, `ItemCount`, `Currency`
FROM PosSalesDev.Transaction
WHERE `SiteId` = 31
AND `TransactionDate` = '2018-06-08') AS `d`
GROUP BY TransactionDate, TimeGrouping
ORDER BY HourEndTime;
存储过程中的查询:
CREATE DEFINER=`user`@`%` PROCEDURE `TransactionGet`(siteId varchar(10),
transactionDate Date)
BEGIN
# Query will remove duplicate records from the aggregated data
SELECT `d`.`SiteId`, `d`.`TransactionDate`, (`d`.`TimeGrouping` * 10000) as 'HourEndTime', Sum(`d`.`SalesAmount`) as 'TotalSales', count(`d`.`PosTransactionId`) as 'TransactionCount', Sum(`d`.`ItemCount`) as 'ItemCount', `d`.`Currency`
FROM (SELECT DISTINCT `SiteId`, `TransactionDate`, `TimeGrouping`, `SalesAmount`, `PosTransactionId`, `ItemCount`, `Currency`
FROM PosSalesDev.Transaction
WHERE `SiteId` = siteId
AND `TransactionDate` = transactionDate) AS `d`
GROUP BY TransactionDate, TimeGrouping;
END
任何帮助将非常感激。
谢谢乔迪。
解决方案
避免将参数命名为列名。请参阅13.6.4.2 局部变量范围和解析。
尝试:
DELIMITER //
CREATE DEFINER=`user`@`%` PROCEDURE `TransactionGet`(
_siteId varchar(10),
_transactionDate Date
)
BEGIN
# Query will remove duplicate records from the aggregated data
SELECT
`d`.`SiteId`,
`d`.`TransactionDate`,
(`d`.`TimeGrouping` * 10000) as 'HourEndTime',
Sum(`d`.`SalesAmount`) as 'TotalSales',
count(`d`.`PosTransactionId`) as 'TransactionCount',
Sum(`d`.`ItemCount`) as 'ItemCount',
`d`.`Currency`
FROM
(SELECT
DISTINCT `SiteId`,
`TransactionDate`,
`TimeGrouping`,
`SalesAmount`,
`PosTransactionId`,
`ItemCount`,
`Currency`
FROM
PosSalesDev.Transaction
WHERE
`SiteId` = _siteId AND
`TransactionDate` = _transactionDate
) AS `d`
GROUP BY
`d`.`TransactionDate`,
`d`.`TimeGrouping`;
END//
DELIMITER ;
推荐阅读
- ios - Swift 编写一个带返回值的 async/await 方法
- git - 仅当 git remote 不存在时才添加
- javascript - 在应用程序中,我的标签栏只显示 3 个图标中的 2 个,最后一个栏的图标没有出现。我该如何解决?
- c - c中的类型声明和声明结构
- c++ - 与在新表达式中解析类型 ID 相关的 gcc 发出错误
- python-3.x - 用熊猫中同一行内的新行替换特殊字符
- python - 尝试使用 Python 在注册表中创建运行键
- excel-formula - 使用 Excel 公式将第二个数字与文本分开
- ios - 使用firebase在ios中推送通知
- c# - System.InvalidOperationException 与表单验证