0

私の目標は、テーブルProduct_AおよびProduct_Bから類似の列に基づく列の名前の結果を取得することです。

SQL ServerからExcel、メモ帳、またはテーブルで結果を取得するかどうかは関係ありません。最も重要なのは、結果を取得することです。

手作業の使用量が少ない計算に基づいて結果を取得する方法がわかりませんか?

考慮する必要のあるいくつかの基準:

  • 類似させるには、列のデータ型と名前が同じである必要があります
  • 列からデータを取得することに関心がありません
  • テーブルは基本レベルで作成されます。実際には、テーブルは200列を使用します。

テーブルはSQLServer2008R2にあります

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

このクエリは2つのテーブルを比較し、同じデータ型の同じ名前の列のみを返します。データベース全体で一致するものをすべて見つける必要がある場合は、条件をコメントアウトし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.columnsおよびsys.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を実行できますが、必要なレートと製品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 に答える