Sql 编写查询

Sql 编写查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的任务是编写一个查询,该查询将列出多个表中的所有数据 因此,我: 带有ID和其他一些列的表1 带有ID的表2、ID_u1和其他一些列 表3包含ID和其他一些列。但表3与其他两个表无关。行数也不相同 所以我需要得到这样的结果: 表3中的列、表2中的列和新列,如果比较表3和表2的结果,我将得到这些列 我已经用这段代码完成了,但我不知道如何连接表: SELECT [ColumnFromTable3], CASE WHEN [ColumnFromTable3] IN ('0001', '700

我的任务是编写一个查询,该查询将列出多个表中的所有数据

因此,我:

带有ID和其他一些列的表1 带有ID的表2、ID_u1和其他一些列 表3包含ID和其他一些列。但表3与其他两个表无关。行数也不相同

所以我需要得到这样的结果:

表3中的列、表2中的列和新列,如果比较表3和表2的结果,我将得到这些列

我已经用这段代码完成了,但我不知道如何连接表:

SELECT [ColumnFromTable3],
CASE
    WHEN [ColumnFromTable3] IN ('0001', '7004', '1004', '7001',  '8001', '7014',  '7012', '7015', '7006') THEN 'R1'
    WHEN [ColumnFromTable3] IN ('9001', '9017') THEN 'R2'
    WHEN [ColumnFromTable3] IN ('9003', '9006') THEN 'R3'
    WHEN [ColumnFromTable3] IN ('9005', '9008', '9004') THEN 'R4'
    ELSE 'OTHER'
END AS [NewColumn3]
FROM [dbo].[Table3]
问题是表3与任何其他表都不相关,我需要该表中的一列


你能告诉我怎么解决这个问题吗。谢谢

有一种方法可以使用
行号()
和左连接

with cte as
(
select row_number() over(order by col) rn
from table1
),cte1 as
(
SELECT [ColumnFromTable3],row_number() over(order by col) rn1,
CASE
    WHEN [ColumnFromTable3] IN ('0001', '7004', '1004', '7001',  '8001', '7014',  '7012', '7015', '7006') THEN 'R1'
    WHEN [ColumnFromTable3] IN ('9001', '9017') THEN 'R2'
    WHEN [ColumnFromTable3] IN ('9003', '9006') THEN 'R3'
    WHEN [ColumnFromTable3] IN ('9005', '9008', '9004') THEN 'R4'
    ELSE 'OTHER'
END AS [NewColumn3]
FROM [dbo].[Table3]
) select cte.*,cte1* from cte left join cte1 on cte.rn=cte1.rn1

通常,有几种连接表的方法,这取决于您期望的结果,请检查以下内容

我的程序中的右连接示例:

        string sqlCheck = @"SELECT e.GBC, e.Replaced, e.Description, Barcode, Location, Quantity, Buildneed, p.Quantity - e.Buildneed as Afterbuild FROM Parts p Right JOIN Excel e ON e.GBC = p.GBC";

您如何期望关系数据库系统能够将表X中的数据(您说它与表Y中的数据无关)连接到表Y?一定有一些规则,你作为一个人,会遵循说“哦,当它在表X中表示3时,它与表Y中的“蓝色”相关”或“X中的前3行与Y中的第一行相关,X中的4、5、6与Y中的第二行相关”-甚至像这样的疯狂规则也可以被编码,但必须有一条规则,否则您无法关联数据