Sql 如何在嵌套的集合层次结构中排序相似的项?

Sql 如何在嵌套的集合层次结构中排序相似的项?,sql,tsql,Sql,Tsql,我有一个查询,它以嵌套的集合结构生成以下输出: databaseName | xType | displayLabel | child_xType | child_displayLabel | lft1 | lft2 ---------------------------------------------------------------------------------------------------------

我有一个查询,它以嵌套的集合结构生成以下输出:

databaseName    |   xType       |   displayLabel        |   child_xType     |   child_displayLabel  |   lft1    |   lft2
--------------------------------------------------------------------------------------------------------------------------------
Bob                 label           Search Model name       NULL                NULL                    252         NULL
Bob                 textbox         productName             button              X                       254         255
Bob                 label           Company                 NULL                NULL                    258         NULL
Bob                 combobox        Company                 comboboxItem        CCCC                    260         261
Bob                 combobox        Company                 comboboxItem        DDDD                    260         263
Bob                 combobox        Company                 comboboxItem        HHHH                    260         265
Larry               label           Search Model Name       NULL                NULL                    408         NULL
Larry               textbox         productName             button              X                       410         411
Larry               label           Company                 NULL                NULL                    414         NULL
Larry               combobox        Company                 comboboxItem        DDDD                    416         417
Larry               combobox        Company                 comboboxItem        HHHH                    416         419
“数据库”Bob和Larry之间的唯一区别是Bob有一个额外的comboboxItem,名为“CCCC”。我想要返回的是一个结果集,它结合了“数据库”Bob和Larry的不同元素,同时保持正确的顺序,如下所示

databaseName    |   xType       |   displayLabel        |   child_xType     |   child_displayLabel  
----------------------------------------------------------------------------------------------------
Junior              label           Search Model name       NULL                NULL                    
Junior              textbox         productName             button              X                   
Junior              label           Company                 NULL                NULL                
Junior              combobox        Company                 comboboxItem        CCCC                
Junior              combobox        Company                 comboboxItem        DDDD                    
Junior              combobox        Company                 comboboxItem        HHHH    
一些注意事项:结果需要按照上面的顺序显示,这最终是从第一个结果集中lft1和lft2值的顺序派生出来的。此外,新数据库“Junior”或多或少是新组合“database”的任意名称

我可以想象在客户端级别解决这个问题的方法(逐行呈现每个项目),也可以让Larry使用Bob使用的相同查找,但是有没有一种方法可以使用基于集合的SQL实现这个结果集


谢谢

我仍然不清楚您在问什么,但似乎您可以通过以下查询获得所需的结果集:

SELECT distinct 'Junior' as Database, 
       xType, 
       displayLabel, 
       child_xType, 
       child_displayLabel
FROM MyTable
ORDER BY displayLabel DESC, child_displayLabel ASC
更新:

在你最后一次评论之后,我仍然感到困惑,但请尝试一下

SELECT 'Junior' as Database, 
       xType, 
       displayLabel, 
       child_xType, 
       child_displayLabel
FROM MyTable
GROUP BY xType, displayLabel, child_xType, child_displayLabel
ORDER BY min(lft1),  min(lft2)

@AbeMiessler Junior是结果“数据库”的新名称。这或多或少是武断的,如果不清楚的话,很抱歉。SQL在设计上是无序的——没有所谓的“文件顺序”。这意味着您可以对结果进行排序的唯一方法是在(最外面的)
SELECT
语句中指定它(例如,视图通常不能排序)。另外,
null
对于排序顺序是未定义的(但通常默认为“最小”)。因此,您必须使用指定的排序列(尽管您不必将它们包含在结果集中)。谢谢,Abe。这个查询的问题是,它不一定会保留原始表的顺序,客户需要正确地呈现数据(即,它需要与我在原始问题中发布的结果集的顺序完全一致)。啊,我明白了。order by子句I是否只是为您添加了正确的顺序?@jamnap-您没有明确说明“保留顺序”的方式或含义。不,它不会(只是也测试了一下),因为第一个表中lft1和lft2列(从未显示的嵌套集表派生)的值保证了正确的顺序,不一定是标签的名称。@AbeMiessler几乎完美无瑕。我还有一些其他的要求,我可能在我的问题中没有提到,但是,您的(优秀的)
orderby
子句应该能提供我完成其余问题所需要的+1和接受答案!