java - 如何从行值创建新列

标签 java sql apache-spark

我想使用 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    |
<小时/>

View on DB Fiddle

关于java - 如何从行值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223030/

相关文章:

MySQL查询帮助(join、subselect)

scala - 我需要将配置单元表架构与包含csv文件架构的数据框进行比较

scala - 从 Scala 中选定的数据帧列创建 SOAP XML REQUEST

java - 使用 HashMap 的字数统计程序

java - 在 Hybris 中,如何将一个扩展中的类导入到另一个扩展中

java - 将接口(interface)作为数组列表类型提供时出现编译错误

apache-spark - Spark : rdd. countApprox() 与 rdd.count()

java.lang.ClassCastException : JobEntity cannot be cast to JobExcerpt (using Spring Data Projections)

sql - "::date"在redshift中的应用是什么?

sql - 使用 SQL UNPIVOT 使用多列使一行垂直