Proszę o pomoc w scaleniu tych 2 zapytań, próbowałem użyć UNION
i otrzymuję błąd w wyniku
--Pierwsze zapytanie
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))
--Drugie zapytanie
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))
2 odpowiedzi
Aby użyć UNION
, musisz mieć te same nazwy kolumn, więc nie możesz mieć totalpotnondinas
w jednym zapytaniu i totalpotdinas
w drugim.
To, co możesz zrobić, to wywołać obie kolumny totals
i dodać dodatkową kolumnę, która wskazuje, które zapytanie było źródłem danych. Na przykład:
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))
--Drugie zapytanie
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))
Jeśli pominiesz kolumnę syntetyczną src
, UNION
połączy identyczne wyniki.
Nie jestem pewien, jak to są dwa różne zapytania, z wyjątkiem różnych aliasów, ale możesz mieć tylko jedno ORDER BY
w UNION
(komunikat o błędzie powinien dokładnie to powiedzieć). Próbować:
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
union all
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 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
pegawainama,
totalpotnondinas;
Jeśli chcesz, aby kolumna SUM()
była czytelna między dwoma wynikami, użyj SUM... AS col1, NULL AS col2
w pierwszym zapytaniu i NULL AS col1, SUM... AS col2
w drugim.
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.