SQL:当第一列为空时对第二列进行排序

SQL:当第一列为空时对第二列进行排序,sql,Sql,我有一个有两列字符串的表:“type”和“subtype”。 我想按子类型对项目进行排序。但是,某些行的子类型可能为空。在本例中,我希望使用“type”列中的值进行排序。 例如,如果我有此表: type subtype Bass Plucked Bass Bass Hard Bass Bass Digital Bass Pad Atmosphere Bass Pad Choir 我希望排序结果为: type subtype Pad

我有一个有两列字符串的表:“type”和“subtype”。 我想按子类型对项目进行排序。但是,某些行的子类型可能为空。在本例中,我希望使用“type”列中的值进行排序。
例如,如果我有此表:

type    subtype
Bass    Plucked Bass
Bass    Hard Bass
Bass    Digital Bass
Pad     Atmosphere
Bass    
Pad     Choir

我希望排序结果为:

type    subtype
Pad     Atmosphere
Bass    
Pad     Choir
Bass    Digital Bass
Bass    Hard Bass
Bass    Plucked Bass
子类型按字母顺序排序,只有一行子类型为空时才使用其类型值,因此“Bass”介于“Atmosphere”和“Choir”之间

有什么办法吗?通过编写以下查询,我只在开始时获得了所有空类型:

SELECT type, subtype FROM my_table ORDER BY subtype.name, type.name
我也尝试过,但没有成功:

SELECT type, subtype FROM my_table ORDER BY CASE WHEN subtype.name IS NOT NULL THEN subtype.name ELSE type.name END```
使用
合并()

我不确定您的示例查询试图做什么。几乎在任何SQL引擎中,
子类型.name
只会返回语法错误

编辑:

根据您的评论,
subtype
中的值是空字符串,而不是
NULL
。您可以使用:

order by (case when subtype <> '' then subtype else type end)
order by(子类型为“”时为大小写,然后子类型为else类型为end)
使用
coalesce()

我不确定您的示例查询试图做什么。几乎在任何SQL引擎中,
子类型.name
只会返回语法错误

编辑:

根据您的评论,
subtype
中的值是空字符串,而不是
NULL
。您可以使用:

order by (case when subtype <> '' then subtype else type end)
order by(子类型为“”时为大小写,然后子类型为else类型为end)

。名称
没有意义,复制粘贴问题。我尝试使用合并:
SELECT type,subtype FROM my_table ORDER BY coalesce(subtype,type)
,但它不起作用,我首先得到所有子类型为空的行,然后其他行按子类型正确排序。谢谢,它与空字符串比较一起工作!是
。名称
没有意义,复制粘贴问题。我尝试使用合并:
SELECT type,subtype FROM my_table ORDER BY coalesce(subtype,type)
,但它不起作用,我首先得到所有子类型为空的行,然后其他行按子类型正确排序。谢谢,它与空字符串比较一起工作!