2012-04-02 41 views
0

考慮這個CTE限制SQL加入到只有前3項連接表

;WITH Columns AS 
(
    SELECT object_id AS TableId, Name AS ColumnName 
    FROM SYS.columns 
), 
Tables AS 
(
    SELECT S.NAME AS SchemaName, T.NAME AS TableName, object_id AS TableId 
    FROM sys.tables T 
    INNER JOIN sys.schemas S ON S.schema_id = T.schema_id 
) 
SELECT T.SchemaName, T.TableName, C.ColumnName 
FROM Tables T 
INNER JOIN Columns C ON T.TableId = C.TableId 

我想要做的是限制列的只有結果是前三(比如按字母順序例如訂購)

所以,如果我有1種模式(例如,DBO)有2代表的TableX & TableY與4周的cols每個可樂,COLB,COLC,冷我的結果將是 像

dbo TableX ColA 
    dbo TableX ColB 
    dbo TableX ColC 
    dbo TableY ColA 
    dbo TableY ColB 
    dbo TableY ColC 

schema_a

回答

1

看起來像我找到答案:-)

Select Top row of 2nd table in SQL Join

;WITH Columns AS 
(
    SELECT 
     row_number() over (partition by object_id ORDER BY Name DESC) as RowNumber, 
     object_id AS TableId, 
     Name AS ColumnName 
    FROM SYS.columns 
), 
Tables AS 
(
    SELECT 
     S.NAME AS SchemaName, 
     T.NAME AS TableName, object_id AS TableId 
    FROM sys.tables T 
    INNER JOIN sys.schemas S ON S.schema_id = T.schema_id 
) 
SELECT T.SchemaName, T.TableName, C.RowNumber, C.ColumnName 
FROM Tables T 
INNER JOIN Columns C ON T.TableId = C.TableId 
where RowNumber BETWEEN 1 AND 3 
+0

你這麼快:) – a1ex07 2012-04-02 21:04:00

+0

供應我適合不檢查SO正常。只要刷新頁面,答案就會彈出到「相關」列表中。但是這個問題稍有不同,所以我不認爲這是相當重複的。 – 2012-04-02 21:13:32