2017-03-26 7 views
0

ID_Numberとバージョンの両方の列を持つ2つのテーブルがあります。ただし、ID_numberの形式は異なります。私の目標は、2つのテーブルを比較し、ID_numberが同じで異なるバージョンの行を出力することです。2つのテーブルと一時的な列名を持つ1つのテーブルを比較する方法

例:最初のテーブルのID番号は "23-4567"です。 2番目のテーブルの対応するID番号は「1023004567」です。 "23"の前に "10"が追加され、 " - "が "00"に置き換えられます。すべてのIDで同じです。

最初に、table1のID_Numberをtable2のID_Numberと一致させ、この新しい列の名前をnewIDNumber(table1)に変更し、newIDNumber(table1)とID_Number(table2)を比較しました。上記の例のために表1にID_NUMBERを変換するためのコードが

Eg. '10' + SUBSTRING(@ID_number, 1, 2) + '00' + SUBSTRING(@ID_number, 4,4) AS newIDNumber 

は、今私は、バージョンの違いそれはというエラーを出力

SELECT ID_Number, version, "10" + SUBSTRING(@ID_number, 1, 2) + "00" + SUBSTRING(@ID_number, 4,4) (From first table) AS newIDNumber 
FROM table1 
WHERE (NOT EXISTS 
     (SELECT ID_Number, version 
     FROM table2 
     WHERE (table1.newIDNumber= table2.ID_Number) AND (table1.version = table2.version) 

     ) 
     ) 

を確認するには、次のコードを記述、などである「不明な列「TABLE1 .newIDNumber 'in' where句 ''を指定します。どのようにしてデータベースを中断することなく比較できますか?(newIDNumber列をtable1に挿入する)

"newIDNumberを宣言しますか?"

+0

、これを試してください(T1.ID_Number、1、2)+ '00' + SUBSTRING(ID番号、4、4)テーブルT1からのT1へのリターンJOINテーブル2 AS T2 ON T2.version = T1.version AND T2.ID_Number = '10' T1.ID_Number、4、4)WHERE T2.ID_NumberはNULLです。 'not '句をそのまま使用したい場合は'(table1.newIDNumber = table2.ID_Number) 'を'('10' + substring(table1.ID_Number、1,2)+ '00' + substring (table1.ID_Number、4、4)= table2.ID_Number) ' – ZLK

+0

エラーを取得するために、newidnumberがoutterクエリで定義され、内部クエリでは定義されていません。 – user1327961

答えて

0
SELECT 
    ID_Number 
    , version 
FROM 
    table1 
WHERE 
    NOT EXISTS 
    (
     SELECT 1 
     FROM table2 
     WHERE 
      "10" + SUBSTRING(table1.ID_number, 1, 2) 
      + "00" + SUBSTRING(table1.ID_number, 4,4) = table2.ID_Number 
      AND table1.version = table2.version 
    ) 
0

サンプルデータを送信する必要があります。

`SELECT T1.ID_Number、T1.version、newIDNumber = '10' + SUBSTRING(T1.ID_Number、1、2)+ '00' + SUBSTRING(T1のようなおそらく

declare @t table(col1 varchar(50)) 
insert into @t values('23-4567') 

declare @t1 table(col1 varchar(50)) 
insert into @t1 values('1023004567') 


;With CTE as 
(
select t.col1 

from @t t 
inner join @t1 t1 
on substring(t.col1,1,charindex('-',t.col1)-1)= 
substring(t1.col1,charindex('10',t1.col1)+2,charindex('00',t1.col1)-3) 
where NOT EXISTS(
select * from @t1 t1 
where substring(t.col1,charindex('-',t.col1)+1,len(col1)) 
=substring(t1.col1,charindex('00',t1.col1)+2,len(col1)) 
) 
) 

select * from cte t