【发布时间】:2018-08-13 08:51:45
【问题描述】:
我目前正在制作一个程序来将数据存储在数据库 sql server 中。 数据是一个成本,最多分为 5 列成本细节。 至于第一行它用 1 标记,第二行用 2 标记,最多 5 行具有相同的 id。 所以我正在制作如下图所示的表格。现在我想像图片中那样从行到列选择表格。 我正在做这样的查询。我得到了我想要的结果,但问题是查询成本是执行计划的 5 倍或更多倍,只需选择同一个表。 我的问题是,有没有一种方法可以通过选择一次表格来使结果像图片中一样,或者是否有任何其他方法可以使结果具有更好的性能,我听说使用枢轴将行转换为列,但是在我的情况我不知道该怎么做。谢谢回复
这是执行计划https://www.brentozar.com/pastetheplan/?id=SJGJdaCB7
select * FROM TblKecelakaanBiaya;
with tbl AS (
select *, ROW_NUMBER() OVER(PARTITION by id_kasus ORDER BY id_kasus) rn FROM TblKecelakaanBiaya
)
SELECT A.id_kasus, A.ket_biaya1, A.jlh_biaya1, C.ket_biaya2, C.jlh_biaya2,
D.ket_biaya3, D.jlh_biaya3, E.ket_biaya4, E.jlh_biaya4, F.ket_biaya5, F.jlh_biaya5
FROM (SELECT id_kasus, ket_biaya ket_biaya1, jlh_biaya jlh_biaya1 FROM tbl WHERE rn = 1) A
LEFT JOIN (SELECT id_kasus, ket_biaya ket_biaya2, jlh_biaya jlh_biaya2 FROM tbl WHERE rn = 2) C ON A.id_kasus = C.id_kasus
LEFT JOIN (SELECT id_kasus, ket_biaya ket_biaya3, jlh_biaya jlh_biaya3 FROM tbl WHERE rn = 3) D ON A.id_kasus = D.id_kasus
LEFT JOIN (SELECT id_kasus, ket_biaya ket_biaya4, jlh_biaya jlh_biaya4 FROM tbl WHERE rn = 4) E ON A.id_kasus = E.id_kasus
LEFT JOIN (SELECT id_kasus, ket_biaya ket_biaya5, jlh_biaya jlh_biaya5 FROM tbl WHERE rn = 5) F ON A.id_kasus = F.id_kasus
查询 1 的执行计划只有 1%,而另一个是 99%。
【问题讨论】:
-
快照真的很难看。
-
请不要粘贴图片,当您可以将查询和输出添加为文本并且实际执行计划可以在线发布时:brentozar.com/pastetheplan
-
对不起,我不知道我是否可以复制执行计划。但是现在如何编辑问题?
-
请以我的这个问题为例,你可以发一个没有图片的问题:stackoverflow.com/questions/41840829如果你能做到,你更有可能得到回应
标签: sql sql-server database pivot