我有一些我想改进的工作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似乎给了我一些问题,但我需要这些才能使核心代码工作。
答案 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,我们使用该优先级来排序结果集。