Jad*_*ric 14 t-sql sql-server calculated-columns where-clause
我正在尝试在where子句中使用计算列.
我已尝试从CROSS APPLY到子查询选择的所有内容,但它并没有给我任何接近我需要的东西.
我的查询到目前为止:
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
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为'Sales'是无效列
Stu*_*tLC 19
您需要将内部查询包装在派生表或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;
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以为此使用公用表表达式
;WITH CTE AS
(
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
GROUP BY p.Code, c.AccountNumber, Sale
)
SELECT *
FROM CTE WHERE CTE.Sales>100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18076 次 |
| 最近记录: |