2012-05-07 82 views
0

我有一个查询:订购SQL访问数据

select * from 
(
select i.id, i.art_id, i.c_izm, i.c_zime_izm, i.ac_izm, i.rc_izm, i.f_nos, convert(nvarchar,dateadd(mi,-30,i.datums),100) as dat 
from nol_art_izmaina i 
inner join nol_art a on i.art_id=a.id 
where datepart(year,print_dat)=2005 
order by a.nos --when I add this row, the error shows 
union all 
select distinct null,null,'','','','', f_nos, min(dat) 
from nol_art_izmaina 
where datepart(year,print_dat)=2005 
group by f_nos 
)tablePlusHeaders 
order by dat desc 

我需要做什么?我需要来自第一个查询的数据按a.nos值排序。我怎么做?

编辑
结果表应该是这样的,但只有我的数据:

Name ImpFile/Job   Year 
-------------------------------- 
     Imp01 20.01.2012    This is from set2 
John Clerk    1986 This is from set1 
James Assistant   1990 This is from set1 
     Imp02 26.02.2012    This is from set2 
Anna Manager    1982 This is from set1 
Sam Salesman   1985 This is from set1 
Dean Cleaner    1985 This is from set1 
+1

'order by'子句不适用于union! – Murtaza

+0

@Murtaza有没有办法订购这些数据? – Brezhnews

+0

我认为你需要澄清你到底是什么。您将两个结果集合在一起,但是您希望第一个集合的结果按特定列进行排序?第二套如何订购? –

回答

1

的错误可能是因为没有列号,但f_nos。要订购联盟,您需要为每个选择添加一个标记,然后按f_nos和该标记进行订购:

select * from 
(
    select i.id, i.art_id, i.c_izm, i.c_zime_izm, i.ac_izm, i.rc_izm, i.f_nos, 
     convert(nvarchar,dateadd(mi,-30,i.datums),100) as dat, 
     0 set_id 
    from nol_art_izmaina i 
    inner join nol_art a on i.art_id=a.id 
    where datepart(year,print_dat)=2005 
    union all 
    select distinct null,null,'','','','', f_nos, min(dat), 
     1 set_id 
    from nol_art_izmaina 
    where datepart(year,print_dat)=2005 
    group by f_nos 
) tablePlusHeaders 
order by f_nos, set_id, dat desc 
+0

你的陈述不是我所需要的,但你给了我一个主意,什么工作:) – Brezhnews