我需要一些帮助来在我的数据中实现 SQL PIVOT。
这里是查询:
select a.id_mcm AS ID,b.nama_mcm AS Name,c.nama_ctr AS Place,a.tgl_mutasi AS Move_On
from mcmmutasi as a
left join mcmmcm as b on b.id_mcm=a.id_mcm
left join mcmcenter as c on c.kode_ctr=a.kode_ctr
where a.id_mcm='ATP211004131604'
order by a.tgl_mutasi asc ,b.nama_mcm asc
这是它的输出:
身份证 | 姓名 | 地点 | 继续移动 |
---|---|---|---|
ATP211004131604 | 苏马蒂尼 | 2021-10-04 00:00:00.000 | 安塔帕尼 |
ATP211004131604 | 苏马蒂尼 | 2021-12-03 14:33:19.450 | 西库特拉 |
我想做的是让 2 行变成 1。 所以这是我想要实现的愿望表:
身份证 | 姓名 | 老地方 | 新地方 | 继续移动 |
---|---|---|---|---|
ATP211004131604 | 苏马蒂尼 | 安塔帕尼 | 西库特拉 | 2021-10-04 00:00:00.000 |
因此用户可以轻松阅读以了解人员历史/日志的历史。
我在阅读和了解它的同时尝试使用 PIVOT SQLServer
但是我遇到了一些错误并且完全不知道如何使用它。
那么任何人都可以帮助我并告诉我如何实现这一目标。
这是我的 PIVOT 查询代码:
WITH pivot_data AS
(
select a.id_mcm as id ,b.nama_mcm as name , c.nama_ctr as Place,a.tgl_mutasi as Move_On
from mcmmutasi as a
left join mcmmcm as b on b.id_mcm=a.id_mcm
left join mcmcenter as c on c.kode_ctr=a.kode_ctr
where a.id_mcm='ATP211004131604'
)
SELECT name,place,move_on
FROM pivot_data
PIVOT (max(id) FOR id IN (name,place,move_on)) AS p;
Pivot 不太适合这种情况,因为您似乎同时需要 MIN() 和 MAX(),因此请使用
group by
,例如:
SELECT
a.id_mcm AS ID
, b.nama_mcm AS Name
, min(c.nama_ctr) as old_place
, max(c.nama_ctr) as new_place
, max(a.tgl_mutasi) AS Move_On
FROM mcmmutasi AS a
LEFT JOIN mcmmcm AS b ON b.id_mcm = a.id_mcm
LEFT JOIN mcmcenter AS c ON c.kode_ctr = a.kode_ctr
WHERE a.id_mcm = 'ATP211004131604'
GROUP BY a.tgl_mutasi ASC
, b.nama_mcm ASC
ORDER BY a.tgl_mutasi ASC
, b.nama_mcm ASC
但是如果任何选择的行数超过 2 行,则此分组结果可能不是您所希望的。可能需要提供更复杂的样本数据(以及更复杂数据的预期结果)。