如何在SQL Server中以父子格式排列表数据

时间:2016-08-15 09:05:02

标签: sql-server database

我需要将表安排在父子结构中。

如何查询此表?

txnno   Name        type    isHeadr headr
------------------------------------------
1000    BEFORE      JO      Y   
1001    WHILE       JO      Y   
1002    data aaa    JO      N       1000
1003    bbbbdfds    JO      N       1000
1004    ccccccc     JO      N       1000
1012    aaa111      JO      N       1001
1015    bbb222      JO      N       1001
1016    ccc333      JO      N       1001

在我的SQL Server中获得此结果:

txnno   Name        type    isHeadr headr
-----------------------------------------
1000    BEFORE      JO      Y       
1002    data aaa    JO      N       1000
1003    bbbbdfds    JO      N       1000
1004    ccccccc     JO      N       1000
1001    WHILE       JO      Y
1012    aaa111      JO      N       1001
1015    bbb222      JO      N       1001
1016    ccc333      JO      N       1001

1 个答案:

答案 0 :(得分:3)

SELECT *
FROM YourTable
ORDER BY ISNULL(headr,txnno) ASC, isHeadr DESC, txnno

输出:

txnno   Name        type    isHeadr headr
1000    BEFORE      JO      Y       NULL
1002    data aaa    JO      N       1000
1003    bbbbdfds    JO      N       1000
1004    ccccccc     JO      N       1000
1001    WHILE       JO      Y       NULL
1012    aaa111      JO      N       1001
1015    bbb222      JO      N       1001
1016    ccc333      JO      N       1001

如果您使用0代替NULL使用NULLIF

SELECT *
FROM YourTable
ORDER BY ISNULL(NULLIF(headr,0),txnno) ASC, isHeadr DESC, txnno