Sql 订单中第一个产品的交货费您想显示最高“产品价值”的“交货费”吗?您能添加代码吗?如何知道要退回或不退回哪个交货费?老实说,产品价值在OrderID之后按降序排列完全是巧合。每份订单的标准送货费为3.50英镑。因此,当我运行报告时,我只想显示orderHel
Sql 订单中第一个产品的交货费您想显示最高“产品价值”的“交货费”吗?您能添加代码吗?如何知道要退回或不退回哪个交货费?老实说,产品价值在OrderID之后按降序排列完全是巧合。每份订单的标准送货费为3.50英镑。因此,当我运行报告时,我只想显示orderHel,sql,Sql,订单中第一个产品的交货费您想显示最高“产品价值”的“交货费”吗?您能添加代码吗?如何知道要退回或不退回哪个交货费?老实说,产品价值在OrderID之后按降序排列完全是巧合。每份订单的标准送货费为3.50英镑。因此,当我运行报告时,我只想显示orderHello中第一个产品的交付费用,谢谢您的回复。不幸的是,这对我来说是行不通的,因为有多个产品具有相同的单位成本。在实现此排名功能后,尽管在某些情况下可以正常工作,但仍有许多订单将交货费用分配给多个产品。还有别的办法吗?@MattJA你已经接受了一个
订单中第一个产品的交货费您想显示最高“产品价值”的“交货费”吗?您能添加代码吗?如何知道要退回或不退回哪个交货费?老实说,产品价值在OrderID之后按降序排列完全是巧合。每份订单的标准送货费为3.50英镑。因此,当我运行报告时,我只想显示orderHello中第一个产品的交付费用,谢谢您的回复。不幸的是,这对我来说是行不通的,因为有多个产品具有相同的单位成本。在实现此排名功能后,尽管在某些情况下可以正常工作,但仍有许多订单将交货费用分配给多个产品。还有别的办法吗?@MattJA你已经接受了一个合适的解决方案。要点与我的建议相同,它只是计算每个分区中的记录,而不是根据
productValue
计算排名。您好,感谢您的回复。不幸的是,这对我来说是行不通的,因为有多个产品具有相同的单位成本。在实现此排名功能后,尽管在某些情况下可以正常工作,但仍有许多订单将交货费用分配给多个产品。还有别的办法吗?@MattJA你已经接受了一个合适的解决方案。要点与我的建议相同,它只是计算每个分区中的记录,而不是根据productValue
计算排名。这确实解决了我的问题,非常感谢!你能解释一下它到底是怎么做的吗?谢谢这确实解决了我的问题,非常感谢!你能解释一下它到底是怎么做的吗?谢谢
SELECT dbo.Orders.EncryptedOrderId,
dbo.OrderProduct.ProductID,
dbo.OrderProduct.QuantityPerRecipient,
dbo.OrderProduct.NumRecipients,
dbo.OrderProduct.TotalQuantity,
dbo.DocType.Name AS [Product Type],
dbo.ProductGroup_Culture.Name AS [Product Group],
RIGHT(CatalogNo, CHARINDEX('_', REVERSE('_' + CatalogNo)) -1) AS [HamptonsType],
FORMAT(dbo.Orders.DateOrderCreated, 'dd/MM/yyyy HH:mm:ss') AS 'DateOrderCreated',
CAST(REPLACE(dbo.Orders.ClearingResult, 'utf-8', 'utf-16') AS XML ).value('(/UserData//CostCenter/node())[1]', 'nvarchar(max)') AS [Cost Center],
dbo.Users.FirstName,
dbo.Users.LastName,
dbo.Users.CompanyName AS [Branch Name],
dbo.Users.Department AS Subsidiary,
dbo.Users.Custom1,
dbo.Users.Custom2,
dbo.Users.Custom3,
dbo.Users.Custom4,
dbo.Users.Custom5,
dbo.OrderProduct.TotalPrice,
dbo.Orders.ShippingCharges,
dbo.OrderProduct.OrderProductID,
dbo.FileSubmissionDocument.OriginalFileType,
COALESCE (dbo.FileSubmissionDocument.Title, dbo.Product_Culture.Name) AS [Product Name],
OPDV.FriendlyValue AS 'BCard Recipient'
FROM dbo.DocType
INNER JOIN dbo.Doc
ON dbo.DocType.DocTypeID = dbo.Doc.DocTypeID
INNER JOIN dbo.OrderProduct
ON dbo.Doc.ProductID = dbo.OrderProduct.ProductID
LEFT JOIN dbo.Product
ON dbo.Product.ProductID = dbo.Doc.ProductID
LEFT JOIN dbo.ProductGroupMembership
ON dbo.ProductGroupMembership.ProductID = dbo.Doc.ProductID
LEFT JOIN dbo.ProductGroup_Culture
ON dbo.ProductGroup_Culture.ProductGroupID = dbo.ProductGroupMembership.ProductGroupID
INNER JOIN dbo.Orders
ON dbo.OrderProduct.OrderID = dbo.Orders.OrderID
INNER JOIN dbo.Users
ON dbo.Orders.UserID = dbo.Users.UserID
INNER JOIN dbo.Product_Culture
ON dbo.OrderProduct.ProductID = dbo.Product_Culture.ProductID
INNER JOIN dbo.Store_Culture
ON dbo.Store_Culture.StoreID = dbo.Users.AssignedToStoreID FULL OUTER
JOIN dbo.FileSubmissionDocument
ON dbo.OrderProduct.OrderProductID = dbo.FileSubmissionDocument.SubOrderProductID - 1
LEFT JOIN (SELECT OP.OrderProductID,
OP.DialID,
OP.FriendlyValue
FROM OrderProductDialValue OP
LEFT JOIN Dial DI ON DI.DialID = OP.DialID
LEFT JOIN OrderProduct OT ON OT.OrderProductID = OP.OrderProductID
LEFT JOIN Product PR ON PR.ProductID = OT.ProductID
WHERE PR.ExternalID = 'BCName'
AND DI.UProduceDialName = 'Name') OPDV ON OPDV.OrderProductID = dbo.OrderProduct.OrderProductID
WHERE ('@CUSTOMERNAME' is null
OR '@CUSTOMERNAME' = ''
OR dbo.Store_Culture.Name LIKE '%' + '@CUSTOMERNAME' + '%')
AND dbo.OrderProduct.IsDraft = 0
AND dbo.Orders.IsCart=0
AND dbo.Orders.IsSaveForLater=0
AND (('@DATE' <= dbo.Orders.DateOrderCreated)
OR ('@DATE' IS NULL)
OR ('@DATE'=''))
AND ((DATEADD(day, 1, '@DATE') >= dbo.Orders.DateOrderCreated)
OR ('@DATE' IS NULL)
OR ('@DATE'=''))
AND dbo.Users.LastName NOT LIKE '%TEST%'
ORDER BY dbo.Orders.OrderID DESC, dbo.OrderProduct.OrderProductID DESC
select orderID
, productID
, productValue
, DeliveryCharge
from test_t
order by orderID
, productValue desc
;
select orderID
, productID
, productValue
, DeliveryCharge
, CASE RANK() OVER ( PARTITION BY orderID ORDER BY productValue DESC ) WHEN 1 THEN DeliveryCharge ELSE NULL END r
from test_t
order by orderID
, productValue desc
;
select t.orderID
, t.productID
, t.productValue
, rt.mdc DeliveryCharge
from test_t t
left join (
select orderID
, max(productValue) mp
, max(DeliveryCharge) mdc
from test_t
group by orderID
) rt
on (
rt.orderID = t.orderID
AND rt.mp = t.productValue
)
order by orderID
, productValue desc
;
select orderid,
productid,
productvalue,
case ROW_NUMBER() over (partition by orderid order by orderid)
when 1 then deliverycharge
else null end as 'deliverycharge'
from ........