繁体   English   中英

SQL(Server 2008)从不同的表中检索(不同的)数据(存储在新表的列中)

[英]SQL (server 2008) retrieve (distinct) data from different tables (stored in a new table's column)

这是问题。 我有几个带有油井数据的表。 它们中的大多数(不是全部)都具有UWI(代表唯一井标识符)和WELL_NAME列。 我设法使用一个查询,该查询使我知道哪些表具有UWI和WELL_NAME列(使用INFORMATION_SCHEMA)。 我将其保存为新表(UWITABLES)。 (对我而言)棘手的部分是从我从该INFORMATION_SCHEMA查询中获得的所有表中获取“ UWI”和“井名”的“主”表。 我已经尝试了Union方法,但是说实话,我得到的表列表有足够的表让我寻找另一种方法(希望这种方法可以利用我得到的表列表)。

总体情况如下:

  • 我需要获取包含以下各列的表:
 ******************************** * UWI | WELL_NAME | TABLE * ******************************** 

UWI,井名称和该条目源自的表。

  • 一些表具有重复的UWI和井名(某些井在不同的深度间隔上进行测试,因此对于这些“测试”表,我将具有重复的UWI和井名)。 因此,我需要获得在表级别上没有重复的孔的列表:

TABLE_A:

 ******************************************** * UWI | WELL_NAME | TEST_NUMBER * ******************************************** * 005 | Well 1 | 1 * ******************************************** * 005 | Well 1 | 2 * ******************************************** * 005 | Well 1 | 3 * ******************************************** * 007 | Well 3 | 1 * ******************************************** * 007 | Well 3 | 2 * ******************************************** 

TABLE_B:

 ******************************************** * UWI | WELL_NAME | PROD_OIL * ******************************************** * 005 | Well 1 | 52131 * ******************************************** * 006 | Well 2 | 54364 * ******************************************** * 008 | Well 4 | 34538 * ******************************************** * 009 | Well 5 | 1886 * ******************************************** 

结果表:

 ********************************* * UWI | WELL_NAME | TABLE * ********************************* * 005 | Well 1 | TABLE_A * ********************************* * 005 | Well 1 | TABLE_B * ********************************* * 006 | Well 2 | TABLE_B * ********************************* * 007 | Well 3 | TABLE_A * ********************************* * 008 | Well 4 | TABLE_B * ********************************* * 009 | Well 5 | TABLE_B * ********************************* 

通过UWI进行订购不是必须的,只是想像这样放置它,这样就不会太混乱。 如果可能的话,我想从您的专业知识中受益,并获得有关如何构造查询的简短说明。 如果有一个简单的答案,我将不胜感激。 我只是从这里开始。 预先感谢所有人!

-麦克风

试试这个查询

select uwi,well_name,'Table1' as table
from table1
Group by Uwi,Well_name
Union all
select uwi,well_name,'Table2' as table
from table2
Group by Uwi,Well_name

要么

select distinct uwi,well_name,'Table1' as table
    from table1    
    Union all
    select distinct uwi,well_name,'Table2' as table
    from table2

工会应该为您服务。 如果您有一个包含表名的表,则可以像这样构建动态查询。

DECLARE @Sql VARCHAR(MAX)
SELECT @Sql = COALESCE(@Sql + ' UNION ', '') 
    + 'SELECT UWI, WELL_NAME,' + [TableName] + ' AS [Table] FROM ' + [TableName]
FROM UWITABLES

EXEC (@Sql)

UNION会给您DISTINCT UWI, WELL_NAME, TABLE

暂无
暂无

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

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