Ограничение SQL Join только первыми 3 элементами в объединенной таблице - PullRequest
0 голосов
/ 03 апреля 2012

считают это CTE

;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 столбцами в каждой ColA, ColB, ColC, ColD, мои результаты будут что-то вроде

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

schema_a

1 Ответ

1 голос
/ 03 апреля 2012

Похоже, я нашел ответ: -)

Выбрать верхнюю строку 2-й таблицы в 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
...