请您帮我解决下面链接中提到的mysql的对应SQL服务器解决方案:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
答案 0 :(得分:0)
如果IF(a, b, c)
非空且非零,则MySQL b
函数表示返回a
,否则返回c
。
使用IF(a, a, b)
,如果非空且非零,则实际上意味着返回a
,否则返回b
。由于您只使用非空检查,这也是COALESCE(a, b)
所做的,大多数DBMS都支持COALESCE
,包括SQL Server。
因此,这应该适用于MySQL和SQL Server:
SELECT *
FROM categories
ORDER BY COALESCE(parent_id, category_id) -- sort parents and children together
, COALESCE(parent_id, 0) -- sort parent before children
, display_order -- sorts children among themselves
<强>更新强>
上面假设一个带有外键的良好数据模型,而不是具有0
值的数据模型,表明&#34;没有父&#34;。
由于COALESCE
仅检查null,因此您需要使用CASE
语法。这也适用于大多数DBMS。
SELECT *
FROM categories
ORDER BY CASE WHEN parent_id <> 0 THEN parent_id ELSE category_id END
, parent_id
, display_order