我有这个:
ZN BTG BST FS IST D
161 18262 BC An 1577861387 1,8
161 18262 BC Ab 1577861875 3,9
161 18262 FK An 1577862769 3,8
161 18262 FK Ab 1577863033 0,2
161 18262 B An 1577863670 -0,2
161 18262 B Ab 1577863866 1,1
但是我想要这个:
ZN BTG BC An BC An BC Ab BC Ab Fk An Fk An FK Ab FK Ab B An B An B Ab B Ab
161 18262 1577861387 1,8 1577861875 3,9 1577862769 3,8 ......
我不知道从哪里开始。 谢谢。
答案 0 :(得分:1)
假设您拥有一组固定的值,则可以将PIVOT
与多个键一起使用:
SELECT *
FROM table_name
PIVOT ( MAX(ist) AS ist, MAX(d) AS d FOR (bst, fs) IN (
('BC', 'An') AS bc_an,
('BC', 'Ab') AS bc_ab,
('FK', 'An') AS fk_an,
('FK', 'Ab') AS fk_ab,
('B', 'An') AS b_an,
('B', 'Ab') AS b_ab
) )
因此,对于您的测试数据:
CREATE TABLE table_name ( ZN, BTG, BST, FS, IST, D ) AS
SELECT 161, 18262, 'BC', 'An', 1577861387, '1,8' FROM DUAL UNION ALL
SELECT 161, 18262, 'BC', 'Ab', 1577861875, '3,9' FROM DUAL UNION ALL
SELECT 161, 18262, 'FK', 'An', 1577862769, '3,8' FROM DUAL UNION ALL
SELECT 161, 18262, 'FK', 'Ab', 1577863033, '0,2' FROM DUAL UNION ALL
SELECT 161, 18262, 'B', 'An', 1577863670, '-0,2' FROM DUAL UNION ALL
SELECT 161, 18262, 'B', 'Ab', 1577863866, '1,1' FROM DUAL
这将输出:
ZN | BTG | BC_AN_IST | BC_AN_D | BC_AB_IST | BC_AB_D | FK_AN_IST | FK_AN_D | FK_AB_IST | FK_AB_D | B_AN_IST | B_AN_D | B_AB_IST | B_AB_D --: | ----: | ---------: | :------ | ---------: | :------ | ---------: | :------ | ---------: | :------ | ---------: | :----- | ---------: | :----- 161 | 18262 | 1577861387 | 1,8 | 1577861875 | 3,9 | 1577862769 | 3,8 | 1577863033 | 0,2 | 1577863670 | -0,2 | 1577863866 | 1,1
db <>提琴here
答案 1 :(得分:0)
您可以使用条件聚合:
select zn, btg,
max(case when bst = 'BC' and fs = 'An' then ist end) as bc_an_ist
max(case when bst = 'BC' and fs = 'An' then d end) as bc_an_d,
max(case when bst = 'BC' and fs = 'Ab' then ist end) as bc_ab_ist
max(case when bst = 'BC' and fs = 'Ab' then d end) as bc_ab_d,
. . .
from t
group by zn, btg