查询显示错误结果
Query showing wrong result
我的以下查询从 table 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_header
的记录
我的记录在penilaian_detail
当我 运行 我的查询时,我得到了这个结果。
结果应与 penilaian_detail
相同。请告诉我如何解决它。
http://sqlfiddle.com/#!3/f7e4d/8
感谢@dhruvjoshi 的解释。现在结果和我预期的一样
首先,我删除这个
left join Penilaian_Detail e on a.KodePenilaian = e.KodePenilaianH
那我改一下
on a.KodePenilaian = e.KodePenilaianH
到 on a.KodePenilaian = c.KodePenilaianH
问题在于,由于 JOINs
,您在内部查询的结果集中重复了行。
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;
我的以下查询从 table 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_header
的记录
我的记录在penilaian_detail
当我 运行 我的查询时,我得到了这个结果。
结果应与 penilaian_detail
相同。请告诉我如何解决它。
http://sqlfiddle.com/#!3/f7e4d/8
感谢@dhruvjoshi 的解释。现在结果和我预期的一样
首先,我删除这个
left join Penilaian_Detail e on a.KodePenilaian = e.KodePenilaianH
那我改一下
on a.KodePenilaian = e.KodePenilaianH
到 on a.KodePenilaian = c.KodePenilaianH
问题在于,由于 JOINs
,您在内部查询的结果集中重复了行。
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;