SQL - UNION,执行order by时第一个select语句的优先级

时间:2013-10-02 20:31:37

标签: sql sql-server tsql union

我正在尝试首先打印出来自“GermanDB”数据库的结果,同时还显示波士顿数据库中不属于德国数据库的所有内容。这可以在一个查询中完成吗?

我的查询(粗体部分功能但不按我想要的方式排序)

select * from (  
SELECT DISTINCT a.ProductRef  
FROM GERMANDB.dbo.LOCATIONS AS a INNER JOIN GERMANDB.dbo.ITEMS AS b ON a.ProductRef =   b.ProductRef   
WHERE b.ACTIVE=1  
) ta  
UNION select * from  
SELECT DISTINCT c.ProductRef  
FROM BOSTONDB.dbo.LOCATIONS AS c INNER JOIN BOSTONDB.dbo.ITEMS AS d ON c.ProductRef =   d.ProductRef   
WHERE c.ACTIVE=1 (c.ProductRef NOT IN   
(SELECT ProductRef FROM GERMANDB.dbo.ITEMS where ACTIVE=1))  
) tb  
order by ta.ProductRef** , tb.productRef

1 个答案:

答案 0 :(得分:9)

只需添加一个字段即可表示优先级。像这样:

select *, 0 as Priority from (  
SELECT DISTINCT a.ProductRef  
FROM GERMANDB.dbo.LOCATIONS AS a INNER JOIN GERMANDB.dbo.ITEMS AS b ON a.ProductRef =   b.ProductRef   
WHERE b.ACTIVE=1  
) ta  
UNION select *, 1 as Priority from  
SELECT DISTINCT c.ProductRef  
FROM BOSTONDB.dbo.LOCATIONS AS c INNER JOIN BOSTONDB.dbo.ITEMS AS d ON c.ProductRef =   d.ProductRef   
WHERE c.ACTIVE=1 (c.ProductRef NOT IN   
(SELECT ProductRef FROM GERMANDB.dbo.ITEMS where ACTIVE=1))  
) tb  
order by Priority, ProductRef