2016-10-19 16 views
3

私は2つのテーブル(表1と表2)を以下に示します。表からデータを取得しながら、私は上記のリストの通りの2つの行があり、表1では1ストアドプロシージャを使用したデータの更新

+-----------+---------------+---------------------+ 
+ form_id + request_id +   BatchNo  + 
+-----------+---------------+---------------------+ 
+ 5649464 +  562  +  Batch5649464_1 + 
+-----------+---------------+---------------------+ 
+ 5649464 +  563  +  Batch5649464_11 + 
+-----------+---------------+---------------------+ 

表2

+------------+---------------+-----------+ 
+ NumberId + ServiceName + RefId + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  0  + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  0  + 
+------------+---------------+-----------+ 

を表

表2の列を更新したいと思っ。デフォルトではRefIdは0です。その列を表1のデータ(request_id)で更新する必要があります。ご覧のとおり、request_idには2つの異なるデータがあります。データ(562と563)は、私の期待出力ごとに更新されるべきです。しかし、今私は私の初期出力ごとに結果を得ています。 誰も私の期待されたアウトプットで得ることができますか?

DECLARE @Tempnumbers TABLE 
      (
       form_id INT , 
       request_id INT 
      ); 

     ; 
     WITH Result 
        AS (SELECT form_id , 
           CONVERT(BIGINT, (CONVERT(VARCHAR, request_id))) AS request_id 
         FROM  [Table1] 
        ) 
      INSERT INTO @Tempnumbers 
        SELECT form_id, request_id 
        FROM Result; 

     UPDATE DT 
     SET RefID = request_id 
     FROM Table2 DT 
     INNER JOIN @Tempnumbers TN ON TN.NumberId = DT.form_id; 

初期出力

+------------+---------------+-----------+ 
+ NumberId + ServiceName + RefId + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  562 + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  562 + 
+------------+---------------+-----------+ 

予想される出力

+------------+---------------+-----------+ 
+ NumberId + ServiceName + RefId + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  562 + 
+------------+---------------+-----------+ 
+ 5649464 +  XYZ  +  563 + 
+------------+---------------+-----------+ 
+0

2番目の+ 5649464 + XYZ +の決定方法は563ですか?その背後にある論理は何ですか? –

+0

ロジックがありません。そのReferenceIdを表2に追加する必要があります。第1行に563、第2行に562を追加したい場合は、それにも問題はありません。表1のrequest_idからのデータが両方とも表2に更新されている限り、 –

答えて

2

あなたは、テーブルを結合し、更新するROW_NUMBER()を使用することができますRefId

;WITH cte1 AS (
    SELECT *, 
      ROW_NUMBER() OVER (PARTITION BY form_id ORDER BY request_id) as rn 
    FROM Table1 t1 
), cte2 AS (
    SELECT *, 
      ROW_NUMBER() OVER (PARTITION BY NumberId ORDER BY RefId) as rn 
    FROM Table2 t2 
) 

UPDATE c2 
SET RefId = c1.request_id 
FROM cte1 c1 
INNER JOIN cte2 c2 
    ON c1.form_id = c2.NumberId AND c1.rn = c2.rn 

あなたがTable2から選択する場合は、取得します:

NumberId ServiceName RefId 
5649464  XYZ   562 
5649464  XYZ   563 
+0

これは機能しました。それを感謝します。 –

-1

表2は、主キーがない、あなたは異なる値と1つの値と第2の行に最初の行を更新することはできませんので、

をTABLE2するために主キーを追加しない限り、
関連する問題