Sql 如何使用第三个表中的字段将两个表连接到一个查询中?

Sql 如何使用第三个表中的字段将两个表连接到一个查询中?,sql,sql-server,join,Sql,Sql Server,Join,我正在努力解决最后几个小时的任务 我有四张桌子: Users (ID INT, Fullname VARCHAR(255)) Segments (Value VARCHAR(255)) Report_1 (ID INT, UserID INT, Segment VARCHAR(255), Total INT) Report_2 (ID INT, UserID INT, Segment VARCHAR(255), Total INT) …我需要获得所有用户的报告,包括所有可能的部分 但是来

我正在努力解决最后几个小时的任务

我有四张桌子:

Users (ID INT, Fullname VARCHAR(255))

Segments (Value VARCHAR(255))

Report_1 (ID INT, UserID INT, Segment VARCHAR(255), Total INT)

Report_2 (ID INT, UserID INT, Segment VARCHAR(255), Total INT)
…我需要获得所有用户的报告,包括所有可能的部分

但是来自Report_1、Report_2的报告可能没有某些用户或段的记录

结果查询必须包含以下列:

UserID, Segment, Report_1.Total(OR NULL), Report_2.Total(OR NULL)

我可以使用交叉连接/应用或其他什么吗?

一个简单的笛卡尔连接和一个外部连接应该可以做到:

SELECT Users.ID AS [UserID], Segments.Value AS [Segment], Report_1.Total, Report_2.Total
FROM Users, Segments
LEFT OUTER JOIN Report_1 ON 
    Report_1.UserID = Users.ID AND Report_1.Segment = Segments.Value
LEFT OUTER JOIN Report_2 ON 
    Report_2.UserID = Users.ID AND Report_2.Segment = Segments.Value

一个简单的笛卡尔连接和一个外部连接应该可以做到这一点:

SELECT Users.ID AS [UserID], Segments.Value AS [Segment], Report_1.Total, Report_2.Total
FROM Users, Segments
LEFT OUTER JOIN Report_1 ON 
    Report_1.UserID = Users.ID AND Report_1.Segment = Segments.Value
LEFT OUTER JOIN Report_2 ON 
    Report_2.UserID = Users.ID AND Report_2.Segment = Segments.Value

一个简单的笛卡尔连接和一个外部连接应该可以做到这一点:

SELECT Users.ID AS [UserID], Segments.Value AS [Segment], Report_1.Total, Report_2.Total
FROM Users, Segments
LEFT OUTER JOIN Report_1 ON 
    Report_1.UserID = Users.ID AND Report_1.Segment = Segments.Value
LEFT OUTER JOIN Report_2 ON 
    Report_2.UserID = Users.ID AND Report_2.Segment = Segments.Value

一个简单的笛卡尔连接和一个外部连接应该可以做到这一点:

SELECT Users.ID AS [UserID], Segments.Value AS [Segment], Report_1.Total, Report_2.Total
FROM Users, Segments
LEFT OUTER JOIN Report_1 ON 
    Report_1.UserID = Users.ID AND Report_1.Segment = Segments.Value
LEFT OUTER JOIN Report_2 ON 
    Report_2.UserID = Users.ID AND Report_2.Segment = Segments.Value

我能提出的最好建议是:

选择 U.UserID, 美国价值观, ISNULLR1。总计,0, ISNULLR2。总计,0 从…起 用户U 交叉应用 从段中选择不同的值 s 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告1 分组 段 用户ID R1开 R1.UserID=U.UserID和 R1.段=S.值 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告2 分组 段 用户ID R2接通 R2.UserID=U.UserID和 R2.段=S.值
我希望这是交叉应用的好用法…

我能建议的最好方法是:

选择 U.UserID, 美国价值观, ISNULLR1。总计,0, ISNULLR2。总计,0 从…起 用户U 交叉应用 从段中选择不同的值 s 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告1 分组 段 用户ID R1开 R1.UserID=U.UserID和 R1.段=S.值 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告2 分组 段 用户ID R2接通 R2.UserID=U.UserID和 R2.段=S.值
我希望这是交叉应用的好用法…

我能建议的最好方法是:

选择 U.UserID, 美国价值观, ISNULLR1。总计,0, ISNULLR2。总计,0 从…起 用户U 交叉应用 从段中选择不同的值 s 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告1 分组 段 用户ID R1开 R1.UserID=U.UserID和 R1.段=S.值 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告2 分组 段 用户ID R2接通 R2.UserID=U.UserID和 R2.段=S.值
我希望这是交叉应用的好用法…

我能建议的最好方法是:

选择 U.UserID, 美国价值观, ISNULLR1。总计,0, ISNULLR2。总计,0 从…起 用户U 交叉应用 从段中选择不同的值 s 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告1 分组 段 用户ID R1开 R1.UserID=U.UserID和 R1.段=S.值 左连接 选择 总金额等于总金额, 段 用户ID 从…起 报告2 分组 段 用户ID R2接通 R2.UserID=U.UserID和 R2.段=S.值
我希望这是交叉应用的良好用法…

我已经编辑了您的标题。请看,如果共识是否定的,他们不应该。现在我知道了。。。绝对同意!谢谢我已经编辑了你的标题。请看,如果共识是否定的,他们不应该。现在我知道了。。。绝对同意!谢谢我已经编辑了你的标题。请看,如果共识是否定的,他们不应该。现在我知道了。。。绝对同意!谢谢我已经编辑了你的标题。请看,如果共识是否定的,他们不应该。现在我知道了。。。绝对同意!谢谢我在SQL Server 2012上遇到一个用于实际查询的错误。所以我不得不使用:FROM Users交叉连接段,而不是逗号…我在SQL Server 2012上遇到了一个用于实际查询的错误。所以我不得不使用:FROM Users交叉连接段,而不是逗号…我在SQL Server 2012上遇到了一个用于实际查询的错误。所以我不得不使用:FROM Users交叉连接段,而不是逗号…我在SQL Server 2012上遇到了一个用于实际查询的错误。所以我不得不使用:从用户交叉连接段而不是逗号。。。