根据日期组织SQL数据

时间:2018-02-19 21:45:02

标签: sql oracle

我正在尝试根据订单的日期来组织我的SQL数据。

我的数据:

SELECT DISTINCT ORDER_NO, ITEM, VERSION_NO,
(CASE WHEN ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY NOT_BEFORE_DATE 
 ASC) = 1
         THEN 'what-if'
         ELSE 'wh'
         END) AS VERSION_NEW
,
(CASE WHEN ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY  
NOT_BEFORE_DATE ASC) = 2
        THEN 'initial'
        ELSE 'other'
        END) AS VERSION

FROM FDT_MAPTOOL
WHERE ITEM IN (1032711)
;

我的结果: My Results

我希望我的数据按PO#和它的创建日期排序。 正如您在我的图片中看到的那样,前两行具有相同的ITEM和相同的PO(Order_No)。我需要前两个说侧面的Initial,因为它们是基于日期的前两个。它们是首先创建的。之后的一切应该说别的。

我不确定是否需要PL / SQL?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用不同的分析函数,以便多个行的值可以为1,例如

SELECT DISTINCT ORDER_NO, ITEM, VERSION_NO,
(CASE WHEN DENSE_RANK() OVER (PARTITION BY ORDER_NO ORDER BY NOT_BEFORE_DATE 
 ASC) = 1
         THEN 'what-if'
         ELSE 'wh'
         END) AS VERSION_NEW
,
(CASE WHEN DENSE_RANK() OVER (PARTITION BY ORDER_NO ORDER BY  
NOT_BEFORE_DATE ASC) = 1
        THEN 'initial'
        ELSE 'other'
        END) AS VERSION

FROM FDT_MAPTOOL
WHERE ITEM IN (1032711)
;

rank()dense_rank()应该在这里工作而不是row_number()

nb:请注意确定您是否真的需要“选择不同”