SQL SELECT 对具有空值的列进行排序

发布于 2024-10-28 09:50:33 字数 473 浏览 1 评论 0原文

我的问题与此类似: 如何按代码显示表顺序(例如 01、02…然后是空列)?,但适用于 SQL Server。

简而言之,我有一个 SELECT 语句,它返回以下内容:

ColumnA ColumnB
X       NULL
Y       1
Z       2

..其中排序由 ColumnB 完成。

我们如何强制 (columnB = NULL) 类型的行到底部?即,预期结果是这样的:

ColumnA ColumnB
Y       1
Z       2
X       NULL

谢谢 SOF 社区。

My question is similar to this one: How to display a table order by code (like 01, 02… then null columns)?, but for SQL Server.

In short, I have a SELECT statement, that returns the following:

ColumnA ColumnB
X       NULL
Y       1
Z       2

..where the ordering is done by ColumnB.

How can we force the (columnB = NULL) type of rows to the bottom? ie, the expected result is this:

ColumnA ColumnB
Y       1
Z       2
X       NULL

Thank you SOF community.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怎言笑 2024-11-04 09:50:34

...或者为了避免价值冲突...

SELECT 
   ColumnA, 
   ColumnB
FROM YourTable
ORDER BY 
   CASE WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
   ColumnB

...or in order to avoid value clashing...

SELECT 
   ColumnA, 
   ColumnB
FROM YourTable
ORDER BY 
   CASE WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
   ColumnB
泪意 2024-11-04 09:50:34

您还可以使用 isnull:

select * from thetable order by isnull(columnb, 99999)

isnull 会将 null 替换为您提供给它的值,因此在这种情况下,如果该列为 null,它将替换为 99999。您可以将该值设置为某个大数字,这样它将位于订单底部。

You can also use isnull:

select * from thetable order by isnull(columnb, 99999)

isnull will replace null with the value you provide to it, so in this case, if the column is null, it will replace it with 99999. You can set the value to some big number so it will be at the bottom of the order.

软的没边 2024-11-04 09:50:34

希望能帮助某人,
我只是想补充一点,我遇到了类似的问题,使用 row_number 和分区 -
当它为零时,把它放在最后
我使用了下面的脚本(部分视图):

   ,T.MONTHS_TO_AUTOGROWTH
   ,the_closest_event=ROW_NUMBER() OVER (PARTITION BY SERVERID, DRIVE ORDER BY 
                                      CASE WHEN MONTHS_TO_AUTOGROWTH > 0 THEN MONTHS_TO_AUTOGROWTH ELSE 9999 
                                      END ) 

结果按 MONTHS_TO_AUTOGROWTH 排序,但零排在最后

hoping to help someone,
I just wanted to add that I have had a similiar issue, using row_number and partition by -
when it is zero put it at the end sort of thing
and I used the script below (partial view):

   ,T.MONTHS_TO_AUTOGROWTH
   ,the_closest_event=ROW_NUMBER() OVER (PARTITION BY SERVERID, DRIVE ORDER BY 
                                      CASE WHEN MONTHS_TO_AUTOGROWTH > 0 THEN MONTHS_TO_AUTOGROWTH ELSE 9999 
                                      END ) 

the result is ordered by MONTHS_TO_AUTOGROWTH but zero comes last

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文