Nav*_*aig 0 sql sql-server sql-server-2008
有没有一种方法可以合并两个表,但是将第一个表中的行保留在结果集中的最前面?但是,orderby列不在选择查询中
例如:
表格1
name surname
-------------------
John Doe
Bob Marley
Ras Tafari
Run Code Online (Sandbox Code Playgroud)
表2
name surname
------------------
Lucky Dube
Abby Arnold
Result
Run Code Online (Sandbox Code Playgroud)
预期结果:
name surname
-------------------
John Doe
Bob Marley
Ras Tafari
Lucky Dube
Abby Arnold
Run Code Online (Sandbox Code Playgroud)
我通过以下查询带来数据
SELECT name,surname FROM TABLE 1 ORDER BY ID
UNION
SELECT name,surname FROM TABLE 2
Run Code Online (Sandbox Code Playgroud)
上面的查询并没有跟踪联合之后的顺序。
PS-我不想在我的选择查询中显示ID,我
通过连接表获得ORDER BY Column。以下是我的真实查询
SELECT tbl_Event_Type_Sort_Orders.Appraisal_Event_Type_ID AS Appraisal_Event_Type_ID , ISNULL(tbl_Appraisal_Event_Types.Appraisal_Event_Type_Display_Name, 'UnCategorized') AS Appraisal_Event_Type_Display_Name
INTO #temptbl
FROM tbl_Event_Type_Sort_Orders
INNER JOIN tbl_Appraisal_Event_Types
ON tbl_Event_Type_Sort_Orders.Appraisal_Event_Type_ID = tbl_Appraisal_Event_Types.Appraisal_Event_Type_ID
WHERE 1=1
AND User_Name='abc'
ORDER BY tbl_Event_Type_Sort_Orders.Sort_Order
SELECT * FROM #temptbl
UNION
SELECT DISTINCT (tbl_Appraisal_Event_Types.Appraisal_Event_Type_ID) AS Appraisal_Event_Type_ID , ISNULL(tbl_Appraisal_Event_Types.Appraisal_Event_Type_Display_Name, 'UnCategorized') AS Appraisal_Event_Type_Display_Name
FROM tbl_Appraisal_Event_Types
INNER JOIN tbl_Appraisal_Events
ON tbl_Appraisal_Event_Types.Appraisal_Event_Type_ID = tbl_Appraisal_Events.Event_Type_ID
INNER JOIN tbl_Appraisals
ON tbl_Appraisal_Events.Appraisal_ID = tbl_Appraisal_Events.Appraisal_ID
WHERE 1=1
AND ((tbl_Appraisals.Assigned_To_Staff_User) = 'abc' OR (tbl_Appraisals.Assigned_To_Staff_User2) = 'abc' OR (tbl_Appraisals.Assigned_To_Staff_User3) = 'abc')
Run Code Online (Sandbox Code Playgroud)
将放入UNION ALL派生表中。为了避免重复出现,请在第二个选择中select distinct添加,并添加一个NOT EXISTS,以避免在两个表中都找到相同人时返回两次:
select name, surname
from
(
select distinct name, surname, 1 as tno
from table1
union all
select distinct name, surname, 2 as tno
from table2 t2
where not exists (select * from table1 t1
where t2.name = t1.name
and t2.surname = t1.surname)
) dt
order by tno, surname, name
Run Code Online (Sandbox Code Playgroud)