【发布时间】:2014-09-10 15:49:16
【问题描述】:
基本上,我有一个非常复杂的 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 项目必须出现在选择列表中。”
注意事项:
- #temp_table 中有
Last_Name和First_name列 - 由于要求,我无法在
SELECT语句中组合(Last_Name + First_Name)。结果必须显示 2 个单独的列,它们是Last_Name和First_Name - 最好,我想在
INSERT语句中进行排序,因为我不希望在我的每个SELECT DISTINCT * FROM #temp_table语句中重写ORDER BY子句。
【问题讨论】:
-
您需要选择您想要成为 DISTINCT 的列
-
选择不同的什么?,你想要哪些列?
-
请看我上面编辑的查询。谢谢指出,我都需要。
标签: sql-server sorting stored-procedures sql-order-by