1

私は以下のコードを持っていましたが、UNIONのためにすべてのレコードが表示されています:

'WITH x AS
( 
  SELECT m, ' + @columnlist + ', rn = ROW_NUMBER() OVER (PARTITION BY ClientNric ORDER BY m DESC) 
  FROM  
  (   
    SELECT m = ''' + @table1 + ''', * FROM ' + @table1 + '
    UNION ALL  
    SELECT m = ''' + @table2 + ''', * FROM ' + @table2 + '
  ) AS y 
) 
SELECT ' + @columnlist + ', DataState = m 
  FROM x  
  WHERE rn = 1;'

exec(@sql)

次のような結果が必要です。

table1 
ID   Name 
1    TestA 
2    TestB     
3    TestC 
4    TestD 

table2 
ID   Name 
1    TestE 
2    TestF     
3    TestG 
4    TestD 

Results: 
Name     DataState 
TestA    table1 
TestB    table1 
TestC    table1 
TestD    table2 

結果を達成する方法をアドバイスできますか?ありがとう。

4

1 に答える 1

0

左の参加は仕事をするべきだと私は思います:

SELECT
  t1.Name,
  DataState = COALESCE(t2.DataState, 'table1')
FROM table1 t1
  LEFT JOIN (
    SELECT
      Name,
      DataState = 'table2'
    FROM table2
  ) t2 ON t1.Name = t2.Name

あるいは、結合がID列にあるはずですが、よくわかりません。いずれにせよ、これは少なくともあなたにアイデアを与えるはずです。

于 2012-04-26T17:32:50.637 に答える