SQL语句_行转列

来源:互联网 发布:杀虫剂毒性 知乎 编辑:程序博客网 时间:2024/06/11 16:02

表结构示例:

表名:WY_TEST

列:NO      NUMBER(2,0)

        A          VARCHAR2(20)

 

数据:

NO     A

1        作业内容1

2        tool1

3        1

4        作业内容2 

7        作业内容1

8        tool2

9        3

 

规则: 行号除3余1的为作业内容,余2的为工具编号,余3的为次数

要求:生成如下格式

NO      I_WORK               I_TOOL              I_CNT

1          作业内容1            tool1                    1 

2          作业内容2              

3          作业内容3            tool2                    3

 

SQL语句:

SELECT A.NO,MAX(A.I_WORK) I_WORK,MAX(A.I_TOOL) I_TOOL,MAX(A.I_CNT) I_CNT
FROM (
SELECT
CEIL(T.NO/3) NO,
CASE WHEN MOD(T.NO ,3) = 1 THEN T.A ELSE NULL END I_WORK,
CASE WHEN MOD(T.NO ,3) = 2 THEN T.A ELSE NULL END I_TOOL,
CASE WHEN MOD(T.NO ,3) = 0 THEN T.A ELSE NULL END I_CNT
FROM WY_TEST T ) A
GROUP BY A.NO
ORDER BY A.NO