我是SQL中的新用戶,我可以使用一些幫助與我的代碼,請幫助!SQL Server多表多個過濾器
我有兩個表:表1(項目主)和表2(購買歷史)
- 表1具有像的說明中,供應商,倉庫等的物品信息
- 表2具有每一個交易。
表1例
ITEM Warehouse Vendor
------------------------------
ITEM-0001 ATLANTA AMAZON
ITEM-0002 ATLANTA AMAZON
ITEM-0003 ATLANTA GOOGLE
ITEM-0004 ATLANTA AMAZON
表2中的例子
ITEM Purchase Date Price WAREHOUSE RECEIVE DATE
----------------------------------------------------------------
ITEM-0001 01/01/2017 $5 ATLANTA 03/05/2017
ITEM-0001 01/01/2017 $5.2 DENVER 02/03/2017
ITEM-0001 01/02/2017 $5.4 L.A. 05/07/2017
ITEM-0002 .... AND SO ON
我想有一個綜合作用的結果集 - 這樣的:
ITEM(T1) WAREHOUSE(T1) VENDOR(T1) Avg_Price(T2) LEADTIME
------------------------------------------------------------------
ITEM-0001 ATLANTA AMAZON 5.33333 65 DAYS
ITEM-0002 ATLANTA AMAZON ... so on
這裏是我的SQL代碼:
SELECT
A.ITEM, A.WAREHOUSE, A.VENDOR, B.PRICE, B.LEADTIME
FROM
TABLE1 A, TABLE2 B
WHERE
A.ITEM = B.ITEM
AND B.PRICE = (SELECT AVG(B.PRICE)
FROM TABLE2 B
WHERE A.ITEM = B.ITEM
GROUP BY B.ITEM)
該部分增加了平均價格沒有任何問題。現在我掙扎的是當我想添加LEADTIME的時候。任何想法如何編碼?
LEADTIME是物料到達特定供應商和特定倉庫的平均時間。例如,item0001在6,8和10天內從供應商x抵達倉庫y,則交貨時間將是該供應商和該倉庫的這些天(8天)的平均值。
請幫忙!
在此先感謝
編輯:AFTER幫助在這裏是我的新代碼..謝謝!
SELECT B.ITEM,
A.VENDOR,
B.WAREHOUSE,
SUM(A.QUANTITY),
AVG(A.PRICE) AS AVGERAGE_PURCHASE PRICE,
AVG(A.RECEIVEDATE- A.PURCHASEDATE) AS LEADTIME,
FROM ITEMTABLE B
JOIN ITEMPURCHASETABLE A
ON (B.ITEM=A.ITEM AND B.WAREHOUE=A.WAREHOUSE)
WHERE A.PURCHASEDATE > 1170101
GROUP BY B.ITEM, B.WAREHOUSE, A.VENDOR
HAVING (MIN(A.PRICE)/MAX(A.PRICE)) !<0.1 AND COUNT(A.PRICE) >3
ORDER BY INVENTORY_COST DESC
新問題:日期格式是1YYMMDD是否有解決方案?
[不良習慣踢:使用舊樣式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - 在ANSI - ** 92 ** SQL標準中(** 25年*),舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法*前),其使用是不鼓勵的 –
你想添加前置時間,你告訴我們,但你不告訴我們什麼時間。什麼是交貨時間? – Hogan