sales表List:ID Quantity SalesDate(出售日期)
2 14 2016/10/1
2 49 2016/10/25
2 8 2017/2/10
2 3 2017/3/1
2 5 2017/7/26
2 14 2017/8/2
price表List:ID Price EffectiveDate(生效日期)
2 80.47 2016/10/1
2 81.27 2017/2/1
2 81.00 2017/8/1
現在要把price表里的單價匹配到sales表里,求出總價。(產品種類很多,價格變化也非常頻繁,這里就舉了一個代碼為2的例子)
注意價格生效日期和產品出售日期:
2016/10/1-2016/10/25的產品價格應為80.47;
2017/2/10-2017/7-26的產品價格應為81.27;
2017/8/2的產品價格應為81.
就是讓sales表里的日期大于等于price表里日期的最大值時的價格
看到有個氣量題和這個差不多,然后照著寫了,但是跑出來2017/3/1-2017/7/26這段時間產品的價格是null,不知道哪里有問題
哪位大神幫忙看看!剛學sql,找不出問題。
(SELECT ID,Quantity,SalesDate FROM Sales)a
(SELECT ID,Price,EffectiveDate FROM Price)b
SELECT a.SKU,a.Quantity,a.SalesDate,b.Price
FROM (SELECT ID,Price,EffectiveDate FROM Price)b
RIGHT JOIN (SELECT ID,Quantity,SalesDate FROM Sales)a
ON b.ID=a.ID
and
b.EffectiveDate=(select max(b.EffectiveDate) from (SELECT ID,Price,EffectiveDate FROM Price)b
where b.EffectiveDate <=a.SalesDate)
ORDER BY a.SKU,a.SalesDate
uj5u.com熱心網友回復:
SELECT *
FROM SALES A
OUTER APPLY (SELECT TOP 1 PRICE FROM PRICE WHERE EFFECTIVEDATE<=A.SALESDATE AND ID=A.ID ORDER BY EFFECTIVEDATE DESC) AS B
uj5u.com熱心網友回復:
DECLARE @sales TABLE(ID INT, Quantity INT, SalesDate DATE);
INSERT @sales(ID, Quantity, SalesDate)
VALUES(2, 14, '2016/10/1'), (2, 49, '2016/10/25'), (2, 8, '2017/2/10'),
(2, 3, '2017/3/1'), (2, 5, '2017/7/26'), (2, 14, '2017/8/2');
DECLARE @price TABLE(ID INT, Price DECIMAL(10, 2), EffectiveDate DATE);
INSERT @price(ID, Price, EffectiveDate)
VALUES(2, 80.47, '2016/10/1'), (2, 81.27, '2017/2/1'), (2, 81.00, '2017/8/1');
SELECT *,
(SELECT TOP(1)Price
FROM @price p
WHERE p.ID = s.ID AND s.SalesDate >= p.EffectiveDate
ORDER BY p.EffectiveDate DESC) AS Price
FROM @sales s;
uj5u.com熱心網友回復:
B是什么意思uj5u.com熱心網友回復:
表別名
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/105995.html
標籤:基礎類
上一篇:小白求救!!
下一篇:求大佬解釋,總想不通
