将ORDER BY与UNION和ALIASES一起使用

时间:2016-12-21 12:59:15

标签: sql sql-server tsql

我有一些我想改进的工作SQL。当前的SQL将浏览链接到帐户的所有联系人列表,包括他们的关系,并包括其他选项。这在一些脚本软件中使用,该软件使用代码在其中显示为问题,允许用户选择显示的条目以显示更多信息。

这很好用,但理想情况下我希望主要租户能够进入顶部,而另一个选项位于底部,其他所有内容都按字母顺序排列。

这是当前的代码:

SELECT [Relationship]+' - '+[Contact Name] AS DISPLAY , [Contact Name] AS  VALUE
FROM [Database]
WHERE ID = 'ID'
UNION
SELECT [Relationship]+' - '+[Contact Name] AS DISPLAY,  [Contact Name] AS VALUE
FROM [Database]
WHERE GroupID = 'GroupID' AND [Relationship] IS NOT NULL
UNION
SELECT 'Other' AS DISPLAY, 'Other' AS VALUE

目前,它将显示如下信息:

DAUGHTER - Miss A C
HUSBAND - Mr V C
Other
SON - Mr G B
TENANT - Mrs S C

我想首先将此列为租户,其他所有内容,然后是其他最后一个:

TENANT - Mrs S C
DAUGHTER - Miss A C
HUSBAND - Mr V C
SON - Mr G B
Other

我尝试在代码末尾使用ORDER BY,但发现这只能按字母顺序排序。我还尝试将每个语句括起来并在那里插入ORDER BY函数,但这也不起作用。

有人能够让我知道我错过了什么吗?别名和UNION似乎给了我一些问题,但我需要这些才能使核心代码工作。

2 个答案:

答案 0 :(得分:0)

如果您希望按特定顺序排列结果,请使用明确的ORDER BY。在具有UNION / UNION ALL查询的SQL Server中,您可以使用子查询并按名称引用列:

SELECT t.*
FROM ((SELECT [Relationship]+' - '+[Contact Name] AS DISPLAY , [Contact Name] AS VALUE
       FROM [Database]
       WHERE ID = 'ID'
      ) UNION
      (SELECT [Relationship]+' - '+[Contact Name] AS DISPLAY,  [Contact Name] AS VALUE
       FROM [Database]
       WHERE GroupID = 'GroupID' AND [Relationship] IS NOT NULL
      ) UNION
      (SELECT 'Other' AS DISPLAY, 'Other' AS VALUE
      )
     ) t
ORDER BY (CASE WHEN DISPLAY = 'TENANT' THEN 1
               WHEN DISPLAY = 'OTHER' THEN 3
               ELSE 2
          END);

答案 1 :(得分:0)

您可以使用#main { margin:0px; height:150px; border:1px solid black; } #leftbar { float:left; width: 15%; height:100%; overflow-y: auto; border-right: 1px solid black; } #rightbar { float:right; width:15%; height:100%; overflow-y: auto; border-left: 1px solid black; } #mailbar { margin-left: 15%; width:70%; height:50%; background-color: red; border-bottom: 1px solid black; } 语句来定义要使用的优先级。

例如,在查询结尾处使用此CASE WHEN子句:

ORDER BY

这样,我们在Relationship is TENANT时分配优先级0,在Relationship为Other时分配优先级2,为其余分配优先级1,我们使用该优先级来排序结果集。