[英]Order By Clause not working in SQL Server for Sorting date value
我有两张桌子,一张叫做货架表,上面有货架号
序列号 | 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 | 上架日期 | 08/20/2023 |
3个 | ID002 | 批 | 110009 |
4个 | ID003 | 批 | 565644 |
5个 | ID003 | 上架日期 | 02/10/2024 |
6个 | ID004 | 批 | 222389 |
7 | ID004 | 上架日期 | 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 Clause 并未使用 Shelf_Date 值对数据进行排序。
期望 Output::
SHELF_NUMBER | SUM_QUANTITY 个 | 批 |
---|---|---|
ID001 | 100 | 100006 |
ID004 | 200 | 222389 |
ID003 | 55 | 565644 |
ID002 | 20 | 110009 |
ID005 | 38 | 181865 |
真的卡在这里..提前致谢
假设 (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
您可以将其编写为 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.