在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
在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
另一種解決方案(不是我的,而是更好/更簡單)是:
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中的所有行。
我的嘗試是不要嘗試任何太花哨的東西。它是這樣的:
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標識字段。這不是優雅的,但它做我想做的事情。
這不會投入生產 - 它只是在腳本中用於使用測試數據填充表格。