SQL Server另一个简单的问题

时间:2011-07-14 12:19:26

标签: sql-server

我有2个临时表[Description][Institution],我希望将这两个表放在一个表中。


它们都是这样的表:

表1; #T1

|Description|
blabla
blahblah
blagblag

表2; #T2

|Institution|
Inst1
Inst2
Inst3

我希望得到这样的结果:

表3; #T3

    |Description|     |Institution|
    blabla             Inst1
    blahblah           Inst2
    blagblag           Inst3

它们已按排序顺序排列。

我只需要让它们彼此相邻......

上次我问的是差不多的东西。

我使用了这个查询

Create Table #T3
( 
   [From] Datetime
   ,[To] Datetime
)

INSERT INTO #T3  
  SELECT #T1.[From]       
         , MIN(#T2.[To])
   FROM #T1   
   JOIN #T2 ON #T1.[From] < #T2.[To]   
   GROUP BY #T1.[From] 

Select * from  #T3

它确实适用于日期值,但它在这里不起作用? :■

谢谢。

1 个答案:

答案 0 :(得分:2)

我担心的一件事是你说价值“已经按排序顺序”了。确实没有默认的排序顺序 - 如果您没有指定排序顺序,您可以使用SQL Server来确定返回数据的顺序。下面的解决方案假设有一些方法可以对数据进行排序,使记录“匹配”(使用ORDER BY子句)。

希望这有帮助,

约翰

-- Table 1 test data
Create Table #T1
(
   [Description] nvarchar(30)
)
INSERT INTO #T1 ([Description]) VALUES ('desc1')
INSERT INTO #T1 ([Description]) VALUES ('desc2')
INSERT INTO #T1 ([Description]) VALUES ('desc3')

-- Table 2 test data
Create Table #T2
(
   [Institution] nvarchar(30)
)
INSERT INTO #T2 (Institution) VALUES ('Inst1')
INSERT INTO #T2 (Institution) VALUES ('Inst2')
INSERT INTO #T2 (Institution) VALUES ('Inst3')

-- Create table 3
Create Table #T3
( 
   [Description] nvarchar(30),
   [Institution] nvarchar(30)
);


-- Use CTE2 to add row numbers to the data; use the row numbers to join the tables
-- you must specify the sort order for the data in the tables
WITH CTE1 (Description, RowNum) AS
(
    SELECT [Description], ROW_NUMBER() OVER(ORDER BY [Description]) as RowNum
    FROM #T1
),
CTE2 (Institution, RowNum) AS
(
    SELECT Institution, ROW_NUMBER() OVER(ORDER BY Institution) as RowNum
    FROM #T2
)
INSERT INTO #T3
SELECT CTE1.Description, CTE2.Institution 
FROM CTE1
LEFT JOIN CTE2 ON CTE1.RowNum = CTE2.RowNum


Select * from  #T3