如何批量执行SQL查询统计待合并VendorID的PO数量?
批量统计VendorID对应的PO订单数解决方案
方法一:修改SQL分组统计(最简便)
直接调整原SQL语句,按VendorID分组后一次性返回所有目标ID的PO数量,还能按数量降序排列,刚好匹配你按优先级合并的需求:
SELECT P.VendorID, COUNT(DISTINCT P.PONo) AS PO_Count FROM scm.dbo.PODetailReport P JOIN EGAA.dbo.users U ON U.ID = p.ORIGINATORUSERID WHERE u.IsDisabled = 0 AND P.VendorID IN ( 50, 66674, -- 把158个VendorID全部列在这里,用逗号分隔 -- 依次添加剩余的VendorID... ) GROUP BY P.VendorID ORDER BY PO_Count DESC;
执行后将结果复制到Excel,用XLOOKUP或VLOOKUP匹配到对应行即可快速填充空白字段,比如在Excel空白单元格输入:=XLOOKUP(A2, $统计结果的VendorID列$, $统计结果的PO_Count列$, "")
下拉填充就能完成所有字段的批量填充。
方法二:直接读取Excel中的VendorID列表(无需手动列ID)
如果你的158个VendorID已经在Excel中,可以用OPENROWSET让SQL直接读取Excel数据,省去手动复制ID的麻烦:
SELECT P.VendorID, COUNT(DISTINCT P.PONo) AS PO_Count FROM scm.dbo.PODetailReport P JOIN EGAA.dbo.users U ON U.ID = p.ORIGINATORUSERID -- 关联Excel中的VendorID列表 JOIN OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的Excel文件路径.xlsx', 'SELECT VendorID FROM [Sheet1$]' -- 替换成你的Sheet名和列范围 ) AS V ON P.VendorID = V.VendorID WHERE u.IsDisabled = 0 GROUP BY P.VendorID ORDER BY PO_Count DESC;
注意:使用该方法需要确保SQL Server开启了Ad Hoc Distributed Queries权限,且服务账户能访问指定的Excel文件路径。
关于你之前UNION ALL失败的原因
你之前用UNION ALL失败大概率是因为每个子查询只返回了计数,没有绑定对应的VendorID,导致无法对应到具体ID;同时要写158次子查询也极度冗余。即便语法正确(每个子查询带上VendorID),效率也远不如分组统计,完全不推荐这种方式。
内容的提问来源于stack exchange,提问作者Ebru AKTAS
相关产品推荐
相关产品推荐

