0

我的目标是根据表 Product_A 和 Product_B 中的类似列检索列名称的结果。

如果我从 sql server 获得 excel、记事本或表格中的结果并不重要。最重要的是检索结果。

我不知道如何在人工使用率低的情况下根据计算检索结果?

您需要考虑的一些标准:

  • 列必须具有相同的数据类型和名称才能相似
  • 我对从列中检索数据不感兴趣
  • 该表是在基本级别中创建的。实际上,该表使用 200 列。

该表位于 SQL Server 2008 R2 中

TABLE Product_A
(
   ProductID INT,
   ProductName VARCHAR(100),
   Rate MONEY,
   Action INT,
   MapINT,
) 


TABLE Product_B
(
   ProductID INT,
   Count INT,
   ProductName VARCHAR(100),
   Rate MONEY
) 



Requested result

       ProductID INT,
       ProductName VARCHAR(100),
       Rate MONEY,
4

2 回答 2

1

此查询将比较两个表并仅返回相同数据类型的同名列。如果您需要在数据库中查找所有匹配项,请注释掉t1.name =条件。

select 
      t1.name TableName, 
      c1.name ColumnName,
      types.name,
      c1.max_length,
      c1.precision,
      c1.scale
 from sys.columns c1
inner join sys.columns c2
   -- Condition to join columns - same name, type, length, precision and scale
   on c1.name = c2.name
  and c1.system_type_id = c2.system_type_id
  and c1.max_length = c2.max_length
  and c1.precision = c2.precision
  and c1.scale = c2.scale
   -- Exclude template table
  and c1.object_id <> c2.object_id
inner join sys.tables t1
   on c1.object_id = t1.object_id
inner join sys.types
   on c1.system_type_id = types.system_type_id
inner join sys.tables t2
   on c2.object_id = t2.object_id
where t2.name = 'Product_B'
   -- remove if you want to search for matches in all tables 
  and t1.name = 'Product_A'

检查sys.columnssys.tables上的文档。

于 2012-05-05T09:56:20.717 回答
0

您的要求不是很清楚,但您可能指的是 UNION,因此您可以从两个表中获取数据,这将在单独的行中为您提供每个表中的产品信息:

SELECT ProductId, ProductName, Rate
FROM Product_A
UNION 
SELECT ProductId, ProductName, Rate
FROM Product_B

如果您可以编辑您的 OP 并发布一些示例数据和您的预期结果,那么可以澄清查询。

如果您知道要从表 A 或 B 中获取数据的表,则可以对 ProductName 执行 JOIN,但您需要确定所需的 Rate 和 Product Id:

SELECT a.ProductId
    , a.ProductName
    , a.Rate
FROM Product_A a
JOIN Product_B b
    ON a.ProductName = b.ProductName
于 2012-05-04T20:32:56.217 回答