我正在尝试根据订单的日期来组织我的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)
;
我希望我的数据按PO#和它的创建日期排序。 正如您在我的图片中看到的那样,前两行具有相同的ITEM和相同的PO(Order_No)。我需要前两个说侧面的Initial,因为它们是基于日期的前两个。它们是首先创建的。之后的一切应该说别的。
我不确定是否需要PL / SQL?
谢谢!
答案 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:请注意确定您是否真的需要“选择不同”