繁体   English   中英

如何从行值创建新列

[英]How to create new columns from rows value

我想使用spark sql 2.x和java 8从行值创建新列; 像这样的东西:

原版的 :

POLICY_NO | FIRST_NAME | LAST_NAME |    DOB      |  SEX |
--------------------------------------------------------
1234      |   JOHN     |   HILL    |  01/01/1978 |  0   |
1234      |   JILL     |   HILL    |  10/10/1980 |  1   |
5678      |   JAMES    |   PIKE    |  05/05/1950 |  0   |
5678      |   JOAN     |   MAY     |  04/04/1955 |  1   |

预期成绩 :

POLICY_NO | FIRST_NAME |    LAST_NAME |      DOB   | SEX  | FIRST_NAME2  | LAST_NAME2   | DOB2          | SEX2
---------------------------------------------------------------------------------------------------------------
1234      |   JOHN     |   HILL       | 01/01/1978 | 0    | JILL         |    HILL      |   10/10/1980  |   1
5678      |   JAMES    |   PIKE       | 05/05/1950 | 0    | JOAN         |    MAY       |   04/04/1955  |   1

谢谢

您可以尝试使用条件汇总功能。


查询#1

SELECT POLICY_NO,
       MAX(CASE WHEN SEX= 0 THEN FIRST_NAME END) FIRST_NAME,
       MAX(CASE WHEN SEX= 0 THEN LAST_NAME END) LAST_NAME,
       MAX(CASE WHEN SEX= 0 THEN DOB END) DOB,
       MAX(CASE WHEN SEX= 0 THEN SEX END) SEX,
       MAX(CASE WHEN SEX= 1 THEN FIRST_NAME END) FIRST_NAME2,
       MAX(CASE WHEN SEX= 1 THEN LAST_NAME END) LAST_NAME2,
       MAX(CASE WHEN SEX= 1 THEN DOB END) DOB2,
       MAX(CASE WHEN SEX= 1 THEN SEX END) SEX2
FROM T
GROUP BY POLICY_NO;

| POLICY_NO | FIRST_NAME | LAST_NAME | DOB        | SEX | FIRST_NAME2 | LAST_NAME2 | DOB2       | SEX2 |
| --------- | ---------- | --------- | ---------- | --- | ----------- | ---------- | ---------- | ---- |
| 1234      | JOHN       | HILL      | 01/01/1978 | 0   | JILL        | HILL       | 10/10/1980 | 1    |
| 5678      | JAMES      | PIKE      | 05/05/1950 | 0   | JOAN        | MAY        | 04/04/1955 | 1    |

在数据库小提琴上查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM