sql - 查询显示错误结果

标签 sql sql-server pivot

我的以下查询从表penilaian_headerpenilaian_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中的记录 enter image description here

我在penilaian_detail中的记录

enter image description here

当我运行查询时,我得到了这个结果。 enter image description here

结果应与penilaian_detail相同。请告诉我如何修复它。

http://sqlfiddle.com/#!3/f7e4d/8

感谢@dhruvjoshi 的解释。现在结果正如我所期望的

首先,我删除这个 在 a.KodePenilaian = e.KodePenilaianH 上左连接 Penilaian_Detail e

然后我改变这个 a.KodePenilaian = e.KodePenilaianHa.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/

相关文章:

sql - MS SQL Server - 选择连接查询结果集中多列的最大 n 个结果组

sql - 用于验证字符串是否为有效 SQL 列名称的正则表达式

sql - 组合 COUNT 个查询

c# - 将 NULL 插入 SQL Server 数据库

MySQL:SQL Server HierarchyId 数据类型的替代解决方案

sql - 查询需要长时间的调整建议

sql-server - 在 View 中使用 SQL Pivot

sql - LEFT JOIN WHERE 子句不为空

MYSQL - 数据透视

sql - PostgreSQL:十进制/数字数据类型的数字字段溢出 - 为什么会出现此错误