美好的一天,我試圖選擇一個數據。請先查看我的查詢和表格。如果coloumn具有相同的值,則獲取下一行
我有這個疑問
select * from
(
SELECT * from
(
select distinct TOP 2row, b.OutletCode as 'Kode Otlet',
i.Description as 'Area',
c.Nilai,a.Nip, b.Fullname 'Nama Lengkap', f.positioncode as 'Posisi Sebelumnya',
case when a.[status]=0
then j.ApprovedDate else p.ApprovedDate
end as 'Tanggal Upgrade/Demosi Sebelumnya',
d.positioncode as 'Posisi Baru', a.tanggal as 'Tanggal Upgrade/Demosi'
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 arealeader g on g.OutletCode = b.OutletCode
left join outlet h on g.OutletCode = h.OutletCode
left join area i on i.areacode = h.areacode
left join cutoff k on a.periode = k.cutoffcode
left join
(select ROW_NUMBER() OVER(PARTITION BY KodePenilaianH ORDER BY idPenilaiand ASC) AS Row,
Nilai,KodePenilaianH from penilaian_Detail) c on a.KodePenilaian = c.KodePenilaianH
left join
(SELECT ROW_NUMBER() OVER (PARTITION BY nip ORDER BY ApprovedDate desc) AS rownumber,
ApprovedDate, Nip FROM historyposition) AS p on a.nip=p.nip and p.rownumber = 2
left join (SELECT ROW_NUMBER() OVER (PARTITION BY nip ORDER BY ApprovedDate desc) AS rownumber, ApprovedDate, Nip
FROM historyposition) AS j on a.nip=j.nip and j.rownumber = 1
where a.flag = 1 and h.AreaCode like '%%'
and Periode like '%CO-2016-9-16-15%' and a.nip = '1004863'
--and tanggal <= k.[to] and tanggal >= k.[from]
order by i.Description asc) nilai pivot (sum(nilai) for row in ([1],[2],[3],[4],[5])) piv)A order by Area;
與上面的查詢我得到這個結果
KodeMutasiP OldPosition NewPosition ApprovedBy ApprovedDate Nip KodePenilaian
HP0000514 P007 P007 0802678 2016-09-15 1004863 PE0000787
HP0000513 P007 P007 0802678 2016-04-04 1004863 PE0000130
NULL NULL P007 NULL 2016-04-04 1004863 NULL
NULL NULL P041 NULL 2016-01-20 1004863 NULL
NULL NULL P007 NULL 2015-02-12 1004863 NULL
確定。所以我想要做的是在第一張照片中設置Posisi Sebelumnya
和Tanggal Upgrade/Demosi Sebelumnya
,從第二張照片中設置newposition
和Approveddate
。
但是與此條件 如果newposition
和nip
山口在第二畫面相同與第二行然後跳轉到秒,如果第二同與第三然後跳轉到第四,如果第四不同與第三然後選擇第三個。
我寫的查詢選擇這裏是我的查詢
select * INTO #tMP from historyposition where nip = '1004863' order by approveddate desc
declare @NewPosition varchar(50), @NewPositionLast varchar(50), @ApproveDate datetime, @ApproveDateLast datetime
select top 1 @NewPositionLast = NewPosition, @ApproveDateLast=ApprovedDate from #tmp
WHILE EXISTS (SELECT * FROM #tMP)
BEGIN
select top 1 @NewPosition = NewPosition, @ApproveDate=ApprovedDate from #tmp
if (@NewPosition = @NewPositionLast)
begin
set @NewPositionLast = @NewPosition
set @ApproveDateLast = @ApproveDate
end
else
begin
break
end
delete top(1) #tMP
END
select @NewPositionLast , @ApproveDateLast
drop table #tMP
,我得到這樣的結果
| P007 | 2016-04-04 00:00:00.000 |
結果是像我的預期。
所以我的問題如何設置Posisi Sebelumnya
和Tanggal Upgrade/Demosi Sebelumnya
與我最後一次查詢的結果。
對不起,我的英語不好。
這是我的預期結果。
我知道這是同與第一張照片。但它並不正確。因爲在我的第一個查詢中,我選擇了第二行。
select * from
(
SELECT * from
(
select distinct TOP 2row, b.OutletCode as 'Kode Otlet', i.Description as 'Area',
c.Nilai,a.Nip, b.Fullname 'Nama Lengkap',
case when
l.ShortDesc IS NULL then f.ShortDesc else l.ShortDesc
end
as 'PosisiSebelumnya',
-----
z.approveddate,
------
d.ShortDesc as 'Posisi Baru', a.tanggal as 'Tanggal Upgrade/Demosi'
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 position l on a.posisisaatini = l.positioncode
left join arealeader g on g.OutletCode = b.OutletCode
left join outlet h on g.OutletCode = h.OutletCode
left join area i on i.areacode = h.areacode
left join cutoff k on a.periode = k.cutoffcode
left join
(select ROW_NUMBER() OVER(PARTITION BY KodePenilaianH ORDER BY idPenilaiand ASC) AS Row,
Nilai,KodePenilaianH from penilaian_Detail) c on a.KodePenilaian = c.KodePenilaianH
left join (
select top(1) Nip,NewPosition, ApprovedDate
from (
select Nip,NewPosition,ApprovedDate
, grp = row_number() over(order by ApprovedDate desc) - row_number() over(partition by NewPosition order by ApprovedDate desc)
from HistoryPosition
) t
where grp = 0
order by ApprovedDate
)z on z.Nip = a.Nip
where a.flag = 1
and h.AreaCode like '%%'
and Periode like '%CO-2016-9-16-15%'
and tanggal <= k.[to] and tanggal >= k.[from] order by i.Description asc) nilai
pivot (sum(nilai) for row in ([1],[2],[3],[4],[5])) piv)A order by Area;
我得到這個。
請顯示示例數據和預期輸出。 – NEER
@NEER我已更新我的問題。這與第一張圖片是一樣的,但第一個結果我使用第二行而不是第三行。 – YVS1102