如何从两个表中提取数据时以编程方式对联合查询进行排序?例如,
SELECT table1.field1 FROM table1 ORDER BY table1.field1
UNION
SELECT table2.field1 FROM table2 ORDER BY table2.field1
Run Code Online (Sandbox Code Playgroud)
引发异常
注意:这是在MS Access Jet数据库引擎上尝试的
我有一张桌子如下
Rate Effective_Date
---- --------------
5.6 02/02/2009
5.8 05/01/2009
5.4 06/01/2009
5.8 12/01/2009
6.0 03/15/2009
Run Code Online (Sandbox Code Playgroud)
我应该找到对当前日期和之后有效的所有费率.因此,为了获得当前有效率,我使用
SELECT TOP 1 * from table
where effective_date < '05/05/2009'
order by effective date desc
Run Code Online (Sandbox Code Playgroud)
查询当前日期之后的费率
SELECT * from table
where effective_date > '05/05/2009'
Run Code Online (Sandbox Code Playgroud)
要结合这两个结果,我使用union作为
SELECT TOP 1 * from table
where effective_date < '05/05/2009'
order by effective date desc
UNION
SELECT * from table
where effective_date > '05/05/2009'
Run Code Online (Sandbox Code Playgroud)
预期的结果是
Rate Effective Date
---- --------------
5.8 05/01/2009
5.4 06/01/2009
5.8 12/01/2009
6.0 03/15/2009
Run Code Online (Sandbox Code Playgroud)
但我得到了实际的结果 …
我得到的错误是ORDER by应该在UNION之后出现,但是我希望这些错误在订购之前被排序为一个然后限制为10.
SELECT *
FROM (SELECT time, x, y, z
FROM db
WHERE time >= now
ORDER by time, x
UNION
SELECT time, x, y, z
FROM db
WHERE time < now
ORDER by time, x)
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
我希望你明白,我正在努力做什么,可以帮助我;-)
我有一个令人讨厌的SQL语句似乎很简单,但它看起来很糟糕.我希望sql返回带有userdata的结果集,以便某个用户是结果集中的第一行,如果用户的emailaddress在公司表中.
我有这个SQL返回我想要的但我觉得它看起来很糟糕:
select 1 as o, *
from Users u
where companyid = 1
and email = (select email from companies where id=1)
union
select 2 as o, *
from Users u
where companyid = 1
and email <> (select email from companies where id=1)
order by o
Run Code Online (Sandbox Code Playgroud)
顺便说一句,来自用户表的emailaddress可以在很多公司,所以不能加入emailaddress :-(
您对如何改进该声明有任何想法吗?
我正在使用Microsoft SQL Server 2000.
编辑:我使用这个:
select *, case when u.email=(select email from companies where Id=1) then 1 else 2 end AS SortMeFirst
from Users u
where u.companyId=1
order by …Run Code Online (Sandbox Code Playgroud) union ×4
sql ×3
sql-order-by ×3
sorting ×2
limit ×1
ms-access ×1
select ×1
sql-server ×1
sqlite ×1