SQL正在查找总重量



表格图表

使用的代码:

SELECT
ROUND(SUM(COALESCE(p.[Weight], 0)), 2) AS [Total weight]
FROM
SalesLT.SalesOrderHeader soh
JOIN 
SalesLT.SalesOrderDetail sod ON sod.SalesOrderID = soh.SalesOrderID
JOIN 
SalesLT.Product p ON p.ProductID = sod.ProductID
WHERE
DATEPART(YEAR, soh.DueDate) = '2017' 
AND DATEPART(MONTH, soh.DueDate) = '05' 
OR (DATEPART(MONTH, soh.DueDate) = '06' 
OR DATEPART(MONTH, soh.DueDate) = '12') 
AND soh.ShipMethod = 'Unknown';

我弄错了这个问题,想知道是否有人能看到代码出了什么问题?我觉得不错。

问题:

2017年5月、2017年6月或2017年12月到期订单的总重量(公斤(是多少?仅包括使用未知运输方法的订单。获得总重量,四舍五入并填充到2dp。

您需要两个单位的重量乘以这些单位的数量。如果一个人运送一件物品,或者其中的100件,那么总重量就不一样了。

此外,你需要将年度限制与每个月的限制结合起来,这样你就可以获得2017-04、2017-07、2017-11。在你的原件中,你得到了2017-04,但在第7个月和第11个月的任何一行。使用括号来控制谓词的含义。

SELECT
ROUND(SUM(COALESCE(p.[Weight] * sod.OrderQty, 0)), 2) AS [Total weight]
FROM SalesLT.SalesOrderHeader soh
JOIN SalesLT.SalesOrderDetail sod
ON sod.SalesOrderID = soh.SalesOrderID
JOIN SalesLT.Product p
ON p.ProductID = sod.ProductID
WHERE soh.ShipMethod = 'UnKnown'
AND DATEPART(YEAR, soh.DueDate) = 2017
AND (
DATEPART(MONTH, soh.DueDate) = 04
OR DATEPART(MONTH, soh.DueDate) = 07
OR DATEPART(MONTH, soh.DueDate) = 11
)

正如marc_ s所提到的,由于CCD_ 1返回整数。

就我个人而言,我更喜欢使用3个完整的日期范围,而不是使用日期部分

WHERE soh.ShipMethod = 'UnKnown'
AND (soh.DueDate >= '20170401' and soh.DueDate < '20170501')
AND (soh.DueDate >= '20170701' and soh.DueDate < '20170801')
AND (soh.DueDate >= '20171101' and soh.DueDate < '20171201')

最新更新