使用 ROW_NUMBER() 对 NULL 进行排序

问题描述 投票:0回答:1

我无法将 NULL 值显示为第 2 行

我使用以下语法:

ROW_NUMBER() OVER (PARTITION BY [SOP number], [soporderreturnlineid],
                                CASE 
                                    WHEN sopinvoicecreditlineid IS NOT NULL
                                        THEN 1 
                                        ELSE 2 
                                END,
                               sopinvoicecreditlineid  
                   ORDER BY [SOP number], [soporderreturnlineid],                                      
                            CASE 
                                WHEN sopinvoicecreditlineid IS NOT NULL
                                    THEN 1 
                                    ELSE 2 
                                END ASC,
                                sopinvoicecreditlineid DESC) xx

我需要的是黄线在 xx 列中显示 1,其中

SOPInvoiceCreditLineId
中有一个值,而 xx 显示 2,其中
SOPInvoiceCreditLineId
中的值为空。

希望有人能帮忙吗?

提前致谢。

sql sql-server row-number
1个回答
0
投票

看起来您需要从

PARTITION BY
中删除这些列。如果您想到按相同列进行分区和排序是没有意义的事实,那么这应该是显而易见的。

ROW_NUMBER() OVER (PARTITION BY [SOP number], [soporderreturnlineid]
                   ORDER BY IIF(sopinvoicecreditlineid IS NULL, 2, 1), sopinvoicecreditlineid) xx

或者,如果您不介意顺序完全相反,只需使用

DESC

ROW_NUMBER() OVER (PARTITION BY [SOP number], [soporderreturnlineid]
                   ORDER BY sopinvoicecreditlineid DESC) xx
© www.soinside.com 2019 - 2024. All rights reserved.