我真的不知道我在用SQL做什麼,但我有兩個表。我知道如果列是相同的,你可以從一個表中提取數據並將其添加到另一個表中。 所以我想是這樣的:SQL從不同的來源選擇
SELECT Sum(OrderDetails.Vendor_Price * OrderDetails.Quantity)
WHERE Orders.OrderID=OrderDetails.OrderID
AS COGS
基本上,訂單和OrderDetails表是兩個獨立的表,但ORDERDETAILS有它關聯到Orders表的順序將訂單元素。所以我的函數是Orders.OrderID = OrderDetails.OrderID的地方,這是實現總和的地方,我希望每個訂單。 我能找到一個示例代碼,做這個任務有大量多餘代碼:
SELECT orders.orderid,
orders.cogs
FROM (SELECT orders.orderid,
orderdetails.cogs
FROM (SELECT orders.orderid AS orderid
FROM (((orders WITH(nolock)
LEFT JOIN paymentmethods WITH(nolock)
ON orders.paymentmethodid =
paymentmethods.paymentmethodid)
LEFT JOIN shippingmethods WITH(nolock)
ON orders.shippingmethodid =
shippingmethods.shippingmethodid)
LEFT JOIN customers WITH(nolock)
ON orders.customerid = customers.customerid)
GROUP BY orders.orderid) orders
INNER JOIN (SELECT
orders.orderid
AS orderid,
COUNT(orderdetails.orderdetailid)
AS
orderdetails_count
,
SUM(orderdetails.quantity)
AS quantity,
SUM(orderdetails.vendor_price *
orderdetails.quantity) AS
cogs,
CASE
WHEN SUM(vendor_price) IS NULL THEN NULL
ELSE SUM((CASE
WHEN orderdetails.productcode
LIKE
'DSC-%'
THEN
orderdetails.productprice
- Isnull(
orderdetails.vendor_price, 0)
ELSE orderdetails.productprice
-
orderdetails.vendor_price
END) * orderdetails.quantity)
END
AS
profit,
CASE SUM(orderdetails.productprice *
orderdetails.quantity)
WHEN 0 THEN 0
ELSE Round(((SUM(orderdetails.productprice
*
orderdetails.quantity)
- SUM(
orderdetails.vendor_price *
orderdetails.quantity))/
SUM(
orderdetails.productprice
*
orderdetails.quantity))
* 100,
1)
END
AS
profitmargin
FROM (((orders WITH(nolock)
LEFT JOIN paymentmethods WITH(nolock)
ON orders.paymentmethodid =
paymentmethods.paymentmethodid)
LEFT JOIN shippingmethods WITH(nolock)
ON orders.shippingmethodid =
shippingmethods.shippingmethodid)
LEFT JOIN customers WITH(nolock)
ON orders.customerid = customers.customerid)
LEFT JOIN orderdetails WITH(nolock)
ON orders.orderid = orderdetails.orderid
WHERE orders.orderstatus <> 'Cancelled'
GROUP BY orders.orderid) orderdetails
ON orders.orderid = orderdetails.orderid) orders
ORDER BY orders.orderid DESC
這基本上提供訂單和他們的COGS每個訂單到表中。但是,每次我嘗試刪除一行多餘的代碼時,都會出現錯誤。諸如ShippingMethodID之類的東西是不必要的。請幫忙。
編輯:
SELECT Orders.OrderID,Orders.SalesRep_CustomerID,Orders.Total_Payment_Received,Orders.SalesTax1,SumDetails.COGS,ISNULL(Total_Shipping_Cost.Shipping_Cost,0)作爲Shipping_Cost
FROM訂單
JOIN
(選擇的OrderID,SUM(OrderDetails.Vendor_Price * OrderDetails.Quantity)
AS COGS
FROM訂單明細
GROUP BY訂單ID)
左
JOIN
SumDetails
ON SumDetails.OrderID = Orders.OrderID(SELECT的OrderID,SUM (Shipment_Cost)
AS Shipping_Cost
FROM Trackingnumbers
GROUP BY訂單ID)
AS Total_Shipping_Cost
(SELECT CASE
WHEN Orders.ShippingMethodID
在(19,20,21, 25,26,27,28,30,31,502)
THEN 5
ELSE 0
END)
AS ServiceCharge
ON Total_Shipping_Cost.OrderID =訂單。訂單ID
WHERE Orders.OrderStatus = '已發貨'
和Orders.ShipDate>(GETDATE() - 6)
和Orders.PaymentAmount = Orders.Total_Payment_Received
這是Microsoft SQL Server嗎? – UnhandledExcepSean 2011-12-14 02:31:08
是的。 dotdotdotdot – henryaaron 2011-12-14 02:36:09
這可能是我見過的最痛苦的SQL – UnhandledExcepSean 2011-12-14 02:56:25