我的以下查询从表penilaian_header
和penilaian_detail
获取记录
select *
from
(
select
row, a.tanggal,b.OutletCode,c.Nilai,a.Nip,b.Fullname,a.KodePenilaian,
f.Description as posisilama, d.ShortDesc as posisibaru
from penilaian_header a
left join Employee b on a.Nip = b.Nip
left join Position f on b.PositionCode = f.PositionCode
left join Position d on a.PositionCode = d.PositionCode
left join Penilaian_Detail e on a.KodePenilaian = e.KodePenilaianH
left join arealeader g on g.OutletCode = b.OutletCode
left join (
select
ROW_NUMBER() OVER(PARTITION BY KodePenilaianH ORDER BY idPenilaiand DESC) AS Row,
Nilai,
KodePenilaianH
from penilaian_Detail
) c on a.KodePenilaian = e.KodePenilaianH
where a.Outlet like '%%' and Periode like '%%'
) nilai
pivot
(
sum(nilai) for row in ([1],[2],[3],[4],[5])
) piv;
我在penilaian_detail
中的记录
结果应与penilaian_detail
相同。请告诉我如何修复它。
http://sqlfiddle.com/#!3/f7e4d/8
感谢@dhruvjoshi 的解释。现在结果正如我所期望的
首先,我删除这个
在 a.KodePenilaian = e.KodePenilaianH 上左连接 Penilaian_Detail e
然后我改变这个
a.KodePenilaian = e.KodePenilaianH
到 a.KodePenilaian = c.KodePenilaianH
最佳答案
问题在于,由于JOIN
,您在内部查询的结果集中出现了重复的行。
<强> See inner query fiddle evaluation
更正的查询如下
select *
from
(
select
distinct ---added distinct here to avoid repetition
row, a.tanggal,b.OutletCode,c.Nilai,a.Nip,b.Fullname,a.KodePenilaian,f.Description as posisilama,d.ShortDesc as posisibaru
from penilaian_header a
left join Employee b on a.Nip = b.Nip
left join Position f on b.PositionCode = f.PositionCode
left join Position d on a.PositionCode = d.PositionCode
left join Penilaian_Detail e on a.KodePenilaian = e.KodePenilaianH
left join arealeader g on g.OutletCode = b.OutletCode
left join (
select
ROW_NUMBER() OVER(PARTITION BY KodePenilaianH ORDER BY idPenilaiand DESC) AS Row,
Nilai,KodePenilaianH
from penilaian_Detail
) c on a.KodePenilaian = e.KodePenilaianH
) nilai
pivot
(
sum(nilai)
for row in ([1],[2],[3],[4],[5])
) piv;
<强> SQL demo link
关于sql - 查询显示错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36514184/