sql - 如何在 SQL Server 2005 中的变量中选择多个行值?
问题描述
我写了一个定义变量的脚本。
其中一个变量是这样定义的。
SET @Yesterday = (SELECT SUM (ri.Sales_Quantity)
FROM ReportTransactions AS RT
LEFT JOIN ReportItems AS ri ON rt.Report_Transaction_ID = ri.Report_Transaction_ID
LEFT JOIN MMGroups AS mmg ON ri.MMGroup2_ID = MMG.ID
LEFT JOIN Locations AS L ON L.Location_ID = RT.Store_ID
WHERE rt.Transaction_Date > DATEADD(DAY, -1, GETDATE())
AND (NULL IS NULL OR rt.Store_ID = NULL)
AND (rt.Training_Mode IS NULL OR rt.Training_Mode = 0)
AND ri.Item_Voided = 0
AND ri.Void_Type = 0
AND rt.Transaction_Type IN (0, 1, 2, 3, 4, 5, 6)
AND ri.Item_Type IN (1, 2, 3, 4, 6, 7, 54, 55, 81, 84, 11, 12, 13, 22, 25, 27, 82)
GROUP BY
RT.Store_ID);
但是,这会返回多个值,因此无法定义变量并引发错误。
我的报告需要所有这些行,所以我如何定义它们并检索它们,最佳实践是什么?
解决方案
也许你可以尝试一个表变量。
DECLARE @Yesterday Table
(
Sum_Qty int
)
insert into @Yesterday
SELECT SUM (ri.Sales_Quantity)
FROM ReportTransactions AS RT
LEFT JOIN ReportItems AS ri ON rt.Report_Transaction_ID = ri.Report_Transaction_ID
LEFT JOIN MMGroups AS mmg ON ri.MMGroup2_ID = MMG.ID
LEFT JOIN Locations AS L ON L.Location_ID = RT.Store_ID
WHERE rt.Transaction_Date > DATEADD(DAY, -1, GETDATE())
AND (NULL IS NULL OR rt.Store_ID = NULL)
AND (rt.Training_Mode IS NULL OR rt.Training_Mode = 0)
AND ri.Item_Voided = 0
AND ri.Void_Type = 0
AND rt.Transaction_Type IN (0, 1, 2, 3, 4, 5, 6)
AND ri.Item_Type IN (1, 2, 3, 4, 6, 7, 54, 55, 81, 84, 11, 12, 13, 22, 25, 27, 82)
GROUP BY
RT.Store_ID
推荐阅读
- c++ - 错误:未在此范围内声明“板”(C++)
- regex - 从 XML 中删除特定项目
- database - 在 Windows 10 上下载 MariaDB 列存储
- ios - 推送通知是否在 IOS 上受到限制和定价?
- python - 格式化 dask.diagnostics 进度条
- phpmailer - PHPMailer 有时无法连接到 SMTP 主机
- c# - DecryptByPassPhrase 的等效 C# 代码,反之亦然
- linux - 如何使用 sed 将 virsh xml 数据转换为 PCI BDF 格式
- unity3d - 导入到 unity 的 Blender 文件在每个轴上具有不同的缩放比例
- visual-studio-code - 在 vscode 中设置隐藏开发工具弹出窗口