2014-01-29 74 views
0

在SQL Server 2012中檢索數據我有兩個表:SQL服務器從多個表

Table A 
1 
2 
3 

Table B 
A 
B 
C 
D 
E 
F 

有一個簡單的(不使用遊標)的方式來選擇:

1, A 
1, B 
2, C 
2, D 
3, E 
3, F 

回答

0

另一種解決方案(不是我的,而是更好/更簡單)是:

DECLARE @TotalTableA INT 
SET @TotalTableA = (SELECT COUNT(Company_ID) FROM @TableA AS c) 

;WITH cte1 AS (
SELECT Company_ID, ROW_NUMBER() OVER (ORDER BY Company_ID) AS row_num 
FROM @TableA AS c 
),cte2 (Person_ID, row_num) as 
(
SELECT Person_ID, (Person_ID % @TotalTableA) + 1 AS row_num 
FROM @TableB 
) 

SELECT Company_ID,Person_ID FROM cte1 JOIN cte2 ON cte2.row_num = cte1.row_num 

這避免了櫃檯不需要ID字段。稍有不同的是,我的第一個想法是嚴格限制TableB的兩行。該答案試圖平均分配TableA中TableB中的所有行。

0

我的嘗試是不要嘗試任何太花哨的東西。它是這樣的:

SET @maxcounter = (SELECT MAX(ID) FROM @TableA) 
SET @counter = 1 
WHILE(@counter <= @maxcounter) 
BEGIN 
    SELECT 
     (SELECT Company_ID FROM @TableA WHERE ID = @counter), 
     (SELECT Person_ID FROM @TableB WHERE ID = (@counter * 2) - 1) 

    SELECT 
     (SELECT Company_ID FROM @TableA WHERE ID = @counter), 
     (SELECT Person_ID FROM @TableB WHERE ID = (@counter * 2)) 

    SET @counter = @counter + 1 
END 

maxcounter和counter是int變量。 TableA和TableB是表變量,並且都有一個ID標識字段。這不是優雅的,但它做我想做的事情。

這不會投入生產 - 它只是在腳本中用於使用測試數據填充表格。