基本上,我有一个非常复杂的JOIN语句,我想将结果临时存储在#temp表中,然后我需要将这个#temp表重用于其他多个查询。以下是我的示例代码:
INSERT INTO #temp_table
SELECT --some very complicated join statement
FROM --many tables
WHERE --some very complicated conditions
ORDER BY
CASE WHEN @orderBy = 'LNAME' THEN (Last_Name + First_Name) END,
CASE WHEN @orderBy = 'FNAME' THEN (First_Name + Last_Name) END
@orderBy will accept either 'LNAME' or 'FNAME' and cannot be NULL.
直到这一部分,一切正常。
然后,当我执行以下查询时:
SELECT DISTINCT * FROM #temp_table
我的结果表中绝对没有排序。
我曾尝试在#temp_table进行排序,例如:
SELECT DISTINCT * FROM #temp_table
ORDER BY
CASE WHEN @orderBy = 'LNAME' THEN (Last_Name + First_Name) END,
CASE WHEN @orderBy = 'FNAME' THEN (First_Name + Last_Name) END
但如果指定了SELECT DISTINCT,它会给我一个错误,说明" ORDER BY项目必须出现在选择列表中。"
注意:
Last_Name
和First_name
列
(Last_Name + First_Name)
语句中合并SELECT
。结果必须显示2个单独的列,Last_Name
和First_Name
INSERT
语句中进行排序,因为我不想在每个ORDER BY
语句中重写SELECT DISTINCT * FROM #temp_table
子句。答案 0 :(得分:1)
完成后,查询应该有效:
SELECT DISTINCT /*add here any field you want to display*/,
First_Name,
Last_Name,
CASE WHEN @orderBy = 'LNAME' THEN (Last_Name + First_Name) END as Last,
CASE WHEN @orderBy = 'FNAME' THEN (First_Name + Last_Name) END as First
FROM #temp_table
ORDER BY
Last, First
当您将输出写入表格时,无需在插入之前订购,因为订单将会丢失,正如您所注意到的那样。
答案 1 :(得分:0)
请阅读Aaron提供的评论和链接,但要使其适用于您的场景,请尝试以下方法:
DECLARE @orderBy NVARCHAR(5) = 'FNAME' --order by first name
SELECT
[first_Name]
, [Last_name]
FROM
#temp_table
ORDER BY
CASE WHEN @orderBy = 'LNAME' THEN ( [last_name] + SPACE(1) + [first_Name] )
WHEN @orderBy = 'FNAME' THEN ( [first_Name] + SPACE(1) + [Last_name] )
END