gpt4 book ai didi

sql-server - 在 where 子句中使用计算列

转载 作者:行者123 更新时间:2023-12-02 07:28:09 24 4
gpt4 key购买 nike

我正在尝试在 where 子句中使用计算列。

我一直在尝试从交叉应用到子查询选择的所有方法,但它没有给我任何接近我需要的东西。

到目前为止我的查询:

SELECT p.Code, c.AccountNumber, Sales = (SUM(p.UnitPrice) * SUM(od.QtyShipped)) FROM [dbo].Customer c 
LEFT JOIN [dbo].OrderHeader oh ON oh.CustomerId = c.Id
LEFT JOIN [dbo].OrderDetail od ON od.OrderHeaderId = oh.Id
LEFT JOIN [dbo].Product p ON p.Id = od.ProductId
WHERE Sales > 100
GROUP BY p.Code, c.AccountNumber, Sales

这不起作用,因为“销售”是无效列

最佳答案

在谓词中使用派生列

您需要将内部查询包装在派生表或 CTE 中,以便能够在 WHERE 子句中使用派生列(另请注意 SUM() 仅指定一次,使用乘法的结果):

SELECT x.Code, x.AccountNumber, x.Sales
FROM
(
SELECT p.Code, c.AccountNumber, SUM(p.UnitPrice *od.QtyShipped) AS Sales
FROM [dbo].Customer c
LEFT JOIN [dbo].OrderHeader oh ON oh.CustomerId = c.Id
LEFT JOIN [dbo].OrderDetail od ON od.OrderHeaderId = oh.Id
LEFT JOIN [dbo].Product p ON p.Id = od.ProductId
GROUP BY p.Code, c.AccountNumber
) AS x
WHERE x.Sales > 100;

在 HAVING 子句中重复派生列

根据@Jonny的评论,另一种方法不是干燥计算列,而是重复计算。使用HAVING而不是应用 GROUP BY 后的 WHERE

SELECT p.Code, c.AccountNumber, SUM(p.UnitPrice *od.QtyShipped) AS Sales 
FROM [dbo].Customer c
LEFT JOIN [dbo].OrderHeader oh ON oh.CustomerId = c.Id
LEFT JOIN [dbo].OrderDetail od ON od.OrderHeaderId = oh.Id
LEFT JOIN [dbo].Product p ON p.Id = od.ProductId
GROUP BY p.Code, c.AccountNumber
HAVING SUM(p.UnitPrice * od.QtyShipped) > 100;

无论哪种情况,根据下面的注释,请注意计算表达式是 SUM(p.UnitPrice * od.QtyShipped) 而不是 SUM(p.UnitPrice) * SUM(od .QtyShipped).

关于sql-server - 在 where 子句中使用计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com