我有兩張桌子,一張叫做貨架表,上面有貨架號
| 序列 | SHELF_NUMBER | 數量 |
|---|---|---|
| 1 | ID001 | 100 |
| 2 | ID002 | 20 |
| 3 | ID003 | 55 |
| 4 | ID004 | 200 |
| 5 | ID005 | 38 |
我擁有的另一個表是 Shelf_Data
| 序列 | SHELF_NUMBER_FK | 場地 | 價值 |
|---|---|---|---|
| 1 | ID001 | 批 | 100006 |
| 2 | ID001 | SHELF_DATE | 2023 年 8 月 20 日 |
| 3 | ID002 | 批 | 110009 |
| 4 | ID003 | 批 | 565644 |
| 5 | ID003 | SHELF_DATE | 2024 年 2 月 10 日 |
| 6 | ID004 | 批 | 222389 |
| 7 | ID004 | SHELF_DATE | 2023 年 10 月 25 日 |
| 8 | ID005 | 批 | 181865 |
我已經撰寫了一個基于 SHELF_DATE 的排序查詢,如下所示
SELECT s.SHELF_NUMBER, SUM(s.QUANTITY), sd.VALUE AS BATCH
FROM SHELF s
LEFT JOIN SHELF_DATA sd
ON s.SHELF_NUMBER = sd.SHELF_NUMBER_FK
AND sd.FIELD IN ('BATCH')
WHERE s.QUANTITY > 0
GROUP BY s.SHELF_NUMBER, sd.VALUE
ORDER BY (CASE
WHEN sd.FIELD = 'SHELF_DATE' THEN
sd.VALUE
END) ASC
所以,我試圖從上面的查詢中完成的是獲取具有有效數量的貨架批號,這些批號按貨架日期升序排序。但是 Order By 子句沒有使用 Shelf_Date 值對資料進行排序。
期望的輸出::
| SHELF_NUMBER | SUM_QUANTITY | 批 |
|---|---|---|
| ID001 | 100 | 100006 |
| ID004 | 200 | 222389 |
| ID003 | 55 | 565644 |
| ID002 | 20 | 110009 |
| ID005 | 38 | 181865 |
真的卡在這里..提前謝謝
uj5u.com熱心網友回復:
如果 (SHELF_NUMBER_FK, FIELD) 是 SHELF_DATA 表的唯一鍵,您可以將其加入兩次。不確定分組時想要哪個日期,假設最大。
SELECT s.SHELF_NUMBER, SUM(s.QUANTITY), sd1.VALUE AS BATCH, max(Convert(DATE, sd2.VALUE, 101) s_date
FROM SHELF s
LEFT JOIN SHELF_DATA sd1
ON s.SHELF_NUMBER = sd1.SHELF_NUMBER_FK
AND sd1.FIELD ='BATCH'
LEFT JOIN SHELF_DATA sd2
ON s.SHELF_NUMBER = sd2.SHELF_NUMBER_FK
AND sd2.FIELD IN ='SHELF_DATE'
WHERE s.QUANTITY > 0
GROUP BY s.SHELF_NUMBER, sd1.VALUE
ORDER BY max(Convert(DATE, sd2.VALUE, 101)) ASC
uj5u.com熱心網友回復:
您可以將其撰寫為 2 個單獨的查詢。
;with cte as
(SELECT s.SHELF_NUMBER, SUM(s.QUANTITY) qty, sd.VALUE AS BATCH
FROM SHELF s
LEFT JOIN SHELF_DATA sd
ON s.SHELF_NUMBER = sd.SHELF_NUMBER_FK
AND sd.FIELD IN ('BATCH')
WHERE s.QUANTITY > 0
GROUP BY s.SHELF_NUMBER, sd.VALUE
)
select c.* from cte c
inner join SHELF_DATA sd
ON s.SHELF_NUMBER = sd.SHELF_NUMBER_FK
where sd.FIELD = 'shelf_date'
order by sd.value
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443778.html
