2012-04-26 47 views
1

我有下面的代碼,但它顯示由於UNION ALL記錄:MS SQL檢索了一定的成績基於兩個表

'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 

可以建議如何實現結果? 謝謝。

回答

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列,我不知道。無論如何,這至少應該給你這個想法。