表格图表
使用的代码:
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')