最近开发遇到一个棘手的问题,未知列数据怎么转换成行字段的问题。请教各位如何解决问题!
行转列嘛,根据FGX group by 取MAX就好了
【以下回答由 GPT 生成】
你可以使用透视表(pivot table)来将FMBLPS列的值转换为单独的字段并显示。透视表是一种数据汇总工具,可以将行字段转换为列字段。
以下是使用透视表来解决该问题的步骤:
sql SELECT A.FGDH, A.FBMNAME, A.FC7, A.FC5, SUM(NVL(A.FM2,0)) AS FM2, COUNT(A.FM2) AS FMBLPS FROM A LEFT JOIN B ON A.FGDH = B.FGDH GROUP BY A.FGDH, A.FBMNAME, A.FC7, A.FC5
转换为:
sql SELECT T.*, T1.FMBLPS FROM ( SELECT A.FGDH, A.FBMNAME, A.FC7, A.FC5, SUM(NVL(A.FM2,0)) AS FM2, COUNT(A.FM2) AS FMBLPS FROM A LEFT JOIN B ON A.FGDH = B.FGDH GROUP BY A.FGDH, A.FBMNAME, A.FC7, A.FC5 ) T JOIN ( SELECT A.FGDH, COUNT(A.FM2) AS FMBLPS FROM A LEFT JOIN B ON A.FGDH = B.FGDH GROUP BY A.FGDH ) T1 ON T.FGDH = T1.FGDH
sql SELECT T.FGDH, T.FBMNAME, T.FC7, T.FC5, T.FM2, MAX(CASE WHEN T.FMBLPS = 1 THEN T.FMBLPS END) AS FMBLPS_1, MAX(CASE WHEN T.FMBLPS = 2 THEN T.FMBLPS END) AS FMBLPS_2, MAX(CASE WHEN T.FMBLPS = 3 THEN T.FMBLPS END) AS FMBLPS_3 FROM ( SELECT T.*, T1.FMBLPS FROM ( SELECT A.FGDH, A.FBMNAME, A.FC7, A.FC5, SUM(NVL(A.FM2,0)) AS FM2, COUNT(A.FM2) AS FMBLPS FROM A LEFT JOIN B ON A.FGDH = B.FGDH GROUP BY A.FGDH, A.FBMNAME, A.FC7, A.FC5 ) T JOIN ( SELECT A.FGDH, COUNT(A.FM2) AS FMBLPS FROM A LEFT JOIN B ON A.FGDH = B.FGDH GROUP BY A.FGDH ) T1 ON T.FGDH = T1.FGDH ) T GROUP BY T.FGDH, T.FBMNAME, T.FC7, T.FC5, T.FM2
这样,你就可以将FMBLPS列的值转换为单独的字段并显示。注意,根据实际情况,你可能需要调整透视表函数中的条件。
如果你想要根据表C的查询结果将FMBLPS列的值转换为单独的字段并显示,你可以将表C的查询结果作为另一个子查询,然后在外部查询中使用透视表函数。以下是具体的代码示例:
SELECT T.FGDH, T.FBMNAME, T.FC7, T.FC5, T.FM2,
MAX(CASE WHEN T.FMBLPS = 1 THEN T.FMBLPS END) AS FMBLPS_1,
MAX(CASE WHEN T.FMBLPS = 2 THEN T.FMBLPS END) AS FMBLPS_2,
MAX(CASE WHEN T.FMBLPS = 3 THEN T.FMBLPS END) AS FMBLPS_3,
C.SYSFORGNAME, C.SYSFEDITTIME
FROM (
SELECT T.*, T1.FMBLPS
FROM (
SELECT A.FGDH, A.FBMNAME, A.FC7, A.FC5, SUM(NVL(A.FM2,0)) AS FM2,
COUNT(A.FM2) AS FMBLPS
FROM A LEFT JOIN B ON A.FGDH = B.FGDH
GROUP BY A.FGDH, A.FBMNAME, A.FC7, A.FC5
) T
JOIN (
SELECT A.FGDH, COUNT(A.FM2) AS FMBLPS
FROM A LEFT JOIN B ON A.FGDH = B.FGDH
GROUP BY A.FGDH
) T1 ON T.FGDH = T1.FGDH
) T
LEFT JOIN (
SELECT C.FGDH, C.SYSFORGNAME, C.SYSFEDITTIME
FROM C
WHERE C.FGDH = 'X'
GROUP BY C.FC7, C.FC5
) C ON T.FGDH = C.FGDH
GROUP BY T.FGDH, T.FBMNAME, T.FC7, T.FC5, T.FM2, C.SYSFORGNAME, C.SYSFEDITTIME
希望这个解决方案对你有所帮助。如果你有任何问题,请随时提问。
【相关推荐】