繁体   English   中英

Order By Clause 在 SQL 服务器中无法用于排序日期值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM