繁体   English   中英

如何基于两个表中的两个键列将 SQL 查询写入联合/加入/或透视数据到两个相同表的列中?

[英]How to write SQL Query to Union/Join/or Pivot Data into columns from two identical tables based on two key columns in both tables?

我有两个名为 Old_User_Info 和 New_User_Info 的表。 我需要通过加入或联合或他们的旋转方式在屏幕上显示数据,以便它们在输出中显示为一行,例如

表 User_Info_Old:

UserID: 1
UserName: Jon Doe
Address: 2030 Pen St
Phone: 999-111-0990

表 User_Info_New:

UserID: 1
UserName: Jon Doe
Address: 1090 Heming Ln
Phone: 809-290-8765

期望输出:

UserID  UserName  Old_Address  New_Address    Old_Phone    New_Phone

1       Jon Doe   2030 Pen St  1090 Heming Ln 999-111-0990 809-290-8765 
2       Jane Doe  909 Kit Ln   7677 Hawk st   876-990-3232 980-322-3333
..

依此类推,每行的其余记录在列中彼此相邻的旧数据和新数据。

我是使用 Pivot 功能的新手,但我相信它需要一些其他功能,例如 Partition 可能是?

我试图从一张表中选择列,然后将所有与第二张表联合起来。 我有一个外部 Select 将选择最后一列,但我想我遗漏了一些东西。

SElect * from 
(
select a.userid, a.username, a.Address as Old_Address, a.phone as Old_Phone
from User_Info_Old a

Union All

SElect b.userid, b.username, b.Address as New_Address, b.phone as New_Phone
from User_Info_New b
)as sub
sort by UserID

期望输出:

UserID    UserName  Old_Address  New_Address    Old_Phone    New_Phone
1         Jon Doe   2030 Pen St  1090 Heming Ln 999-111-0990 809-290-8765
2         Jane Doe  909 Kit Ln   7677 Hawk st   876-990-3232 980-322-3333

但实际输出低于这不是我想要的:

UserID         UserName       Old_Address       Old_Phone
1              Jon Doe        2030 Pen St       809-290-8765
Jon Doe        Jon Doe        999-111-0990      809-290-8765

这是我正在使用的实际查询:

SELECT DISTINCT SEC.MeasureKey as Secondary_Measure_Key, SEC.Subkey as Secondary_Subkey, SEC.MeasureName as Secondary_Measure_Name, if(ISNull(PRI.Denom), Null,PRI.Denom) as Primary_Denom, 
if(ISNull(PRI.Num), Null,PRI.Num) as Primary_Num, if(ISNull(PRI.Rate), Null,PRI.Rate) as Primary_Rate,  if(ISNull(PRI.Contra), Null,PRI.Contra) as Primary_Contraindications, 
SEC.Denom as Secondary_DENOM, SEC.Num as Secondary_NUM, SEC.Rate as Secondary_Rate, 
SEC.Contra as Secondary_Contraindications, PRI.Population as Primary_Population, PRI.flowchart as Primary_flowchart, SEC.population as Secondary_Population, SEC.flowchart as Secondary_Flowchart, 
SEC.MeasureKey + '.' + SEC.Subkey as VLOOKUP 
From
(SELECT --returned 0 rows
DF3.flowchart_name as Flowchart,
DF3.population_name as Population,
Replace(DF3.measure_key,"19","") as MeasureKey, 
DF3.measure_short_name as MeasureName, 
DF3.submeasure_key as Subkey,
DF3.denominator as Denom,
DF3.numerator as Num,
DF3.contraindications as Contra,
DF3.rate as Rate

From DF3_MNR_PRD.Rate_Summary DF3
where DF3.date = '20190217') SEC

LEFT JOIN
(Select
DF2.flowchart_name as Flowchart,
DF2.population_name as Population,
Replace(DF2.measure_key,"18","") as MeasureKey, 
DF2.measure_short_name as MeasureName, 
DF2.submeasure_key as Subkey,
DF2.denominator as Denom,
DF2.numerator as Num,
DF2.contraindications as Contra,
DF2.rate as Rate

From DF2_MNR_PRD.Rate_Summary DF2
where DF2.date = '20180320') PRI

On SEC.MeasureKey = PRI.MeasureKey
and SEC.Subkey = PRI.Subkey

where SEC.Population = 'H4527_MCR-ALL_369'
and PRI.Population = 'H4527 MCR-ALL 369'
and SEC.Flowchart = 'PROD_MR_2019_2RUN1_FCR_02152019004120'
and PRI.Flowchart = 'PROD_MR_2018_MAR_3SDS2_FCR_03192018214442'

order by Secondary_Measure_Key, Secondary_Subkey

我认为你只需要一个“左加入”:

select 
    a.userid, a.username, 
    a.Address as Old_Address, b.Address as New_Address, 
    a.phone as Old_Phone, b.phone as New_Phone
from User_Info_Old a
left join User_Info_New b
on a.userid = b.userid
and a.username = b.username

如果您遇到错误,请告诉我。

暂无
暂无

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

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