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 回答