如果 sql 中没有公共列,如何合并表?
How to merge tables if they don't have a common column in sql?
假设我在 Oracle 中有两个 table。其中一个看起来像这样:
Name
Exam
Grade
Mark
Math
80
Mark
English
67
Andrew
Math
90
Steve
English
59
另一个table我看起来像这样:
Mark
Andrew
Steve
Null
Null
Null
这是我的预期结果:
Mark
Andrew
Steve
Math-80
Math-90
English-59
English-67
Null
Null
如何将第二个 table 与第一个合并,使其看起来像上面的结果?我的主要问题是没有公共列,我必须将第一个 table 的值设置为第二个 table 的列名。我真的被这个困住了...
使用 AS 参数或 CROSS JOIN ?
您还可以阅读此内容:
您可以使用 PIVOTing 和 ROW_NUMBER() 分析函数,以便按每个考试对集合进行分组每个人
SELECT "Mark", "Andrew", "Steve"
FROM (SELECT Name,
Exam || '-' || Grade AS Exam,
ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Exam DESC) AS rn
FROM t1)
PIVOT (
MAX(Exam) FOR Name IN ('Mark' AS "Mark",'Andrew' AS "Andrew",'Steve' AS "Steve")
)
其中 不需要第二个 table
假设我在 Oracle 中有两个 table。其中一个看起来像这样:
Name | Exam | Grade |
---|---|---|
Mark | Math | 80 |
Mark | English | 67 |
Andrew | Math | 90 |
Steve | English | 59 |
另一个table我看起来像这样:
Mark | Andrew | Steve |
---|---|---|
Null | Null | Null |
这是我的预期结果:
Mark | Andrew | Steve |
---|---|---|
Math-80 | Math-90 | English-59 |
English-67 | Null | Null |
如何将第二个 table 与第一个合并,使其看起来像上面的结果?我的主要问题是没有公共列,我必须将第一个 table 的值设置为第二个 table 的列名。我真的被这个困住了...
使用 AS 参数或 CROSS JOIN ?
您还可以阅读此内容:
您可以使用 PIVOTing 和 ROW_NUMBER() 分析函数,以便按每个考试对集合进行分组每个人
SELECT "Mark", "Andrew", "Steve"
FROM (SELECT Name,
Exam || '-' || Grade AS Exam,
ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Exam DESC) AS rn
FROM t1)
PIVOT (
MAX(Exam) FOR Name IN ('Mark' AS "Mark",'Andrew' AS "Andrew",'Steve' AS "Steve")
)
其中 不需要第二个 table