Sql 合并两个查询
请帮助合并这两个查询,我已尝试使用Sql 合并两个查询,sql,sql-server,Sql,Sql Server,请帮助合并这两个查询,我已尝试使用UNION并获得错误结果 --第一个问题 select p.pegawainama,r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as totalpotnondinas from rpotongan r inner join pegawai p on p.pegawainid=r.pegawainid where r.nojenpot not in (1,7,6
UNION
并获得错误结果
--第一个问题
select p.pegawainama,r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as totalpotnondinas
from
rpotongan r
inner join
pegawai p on p.pegawainid=r.pegawainid
where
r.nojenpot not in (1,7,6,12,14)
--and r.pegawainid = '6290134A'
and r.bulan = '3'
and r.tahun = '2012'
and p.kodebayar = '152012'
group by
r.pegawainid,
p.pegawainama
order by
p.pegawainama,
sum(cast(round(r.besarpotongan,0) as int))
--第二个问题
select p.pegawainama, r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as totalpotdinas from rpotongan r
inner join
pegawai p on p.pegawainid=r.pegawainid
where
r.nojenpot in (1,7,6,12,14)
--and r.pegawainid = '6290134A'
and r.bulan = '3'
and r.tahun = '2012'
and p.kodebayar = '152012'
group by
r.pegawainid,
p.pegawainama
order by
p.pegawainama,
sum(cast(round(r.besarpotongan,0) as int))
select p.pegawainama, r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as total,
'potdinas' as src from rpotongan r inner join pegawai p on p.pegawainid=r.pegawainid
where r.nojenpot in (1,7,6,12,14) --and r.pegawainid = '6290134A' and r.bulan = '3'
and r.tahun = '2012' and p.kodebayar = '152012' group by r.pegawainid, p.pegawainama
order by p.pegawainama, sum(cast(round(r.besarpotongan,0) as int))
要使用
UNION
,您需要具有相同的列名,因此不能在一个查询中使用totalpotnodinas
,在另一个查询中使用totalpotdinas
您可以调用这两个列totals
,并添加一个额外的列,指示哪个查询是数据源。例如:
select p.pegawainama,r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as total,
'potnondinas' as src from rpotongan r inner join pegawai p on p.pegawainid=r.pegawainid
where r.nojenpot not in (1,7,6,12,14) --and r.pegawainid = '6290134A' and r.bulan = '3'
and r.tahun = '2012' and p.kodebayar = '152012' group by r.pegawainid, p.pegawainama
order by p.pegawainama, sum(cast(round(r.besarpotongan,0) as int))
--第二个问题
select p.pegawainama, r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as totalpotdinas from rpotongan r
inner join
pegawai p on p.pegawainid=r.pegawainid
where
r.nojenpot in (1,7,6,12,14)
--and r.pegawainid = '6290134A'
and r.bulan = '3'
and r.tahun = '2012'
and p.kodebayar = '152012'
group by
r.pegawainid,
p.pegawainama
order by
p.pegawainama,
sum(cast(round(r.besarpotongan,0) as int))
select p.pegawainama, r.pegawainid, sum(cast(round(r.besarpotongan,0) as int)) as total,
'potdinas' as src from rpotongan r inner join pegawai p on p.pegawainid=r.pegawainid
where r.nojenpot in (1,7,6,12,14) --and r.pegawainid = '6290134A' and r.bulan = '3'
and r.tahun = '2012' and p.kodebayar = '152012' group by r.pegawainid, p.pegawainama
order by p.pegawainama, sum(cast(round(r.besarpotongan,0) as int))
如果省略合成
src
列,UNION
将合并相同的结果。不确定除了不同的别名之外,这两个查询如何不同,但在UNION
中只能有一个ORDER BY
(错误消息应该准确地告诉您)。尝试:
如果要在两个结果之间对
SUM()
列进行解密,请使用SUM。。。作为col1,在第一个查询中NULL作为col2
,而NULL作为col1,求和。。。正如第二节中的col2
。很难说没有错误,但我打赌RDBMS会抱怨您在联合中使用了ORDER BY
,而没有将联合组件包含在()
中。谢谢您的回复,我已经收到了。但是我想知道如果我想让potnodinas和potdinas在不同的列中,因为如果我们使用union,所有列potnodinas和potdinas将存储在一列中。在使用potnodinas
的查询中,将null添加为potdinas
并在使用potdinas
的查询中添加null作为potnodinas