Sql server выберите столбец по номеру

Можно ли выбрать определенные столбцы по количеству столбцов в SQL? Что-то вроде

SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE

Спасибо

Ответ 1

Для этого вам необходимо использовать динамический SQL:

DECLARE @strSQL AS nvarchar(MAX)
DECLARE @strColumnName AS nvarchar(255)
DECLARE @iCounter AS integer 
DECLARE @curColumns AS CURSOR 


SET @iCounter = 0
SET @strSQL = N'SELECT '

SET @curColumns = CURSOR FOR 
(
    SELECT * FROM 
    (
        SELECT TOP 99999 
            COLUMN_NAME 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_NAME = 'T_Markers' 
        AND ORDINAL_POSITION < 4 
        ORDER BY ORDINAL_POSITION ASC 
    ) AS tempT 
)

OPEN @curColumns
FETCH NEXT FROM @curColumns INTO @strColumnName 
WHILE @@FETCH_STATUS = 0
BEGIN
    -- PRINT @strColumnName 
    IF @iCounter = 0 
        SET @strSQL = @strSQL + N'
     [' + @strColumnName + N'] ' 
    ELSE 
        SET @strSQL = @strSQL + N'
    ,[' + @strColumnName + N'] ' 
    SET @iCounter = @iCounter + 1 
FETCH NEXT FROM @curColumns INTO @strColumnName 
END
CLOSE @curColumns
DEALLOCATE @curColumns 

SET @strSQL = @strSQL + N' 
FROM T_Markers 
'

PRINT @strSQL 

Ответ 2

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3'

Этот оператор возвращает третий столбец вашей таблицы

Вам нужно будет написать оператор транзакции SQL, например

DECLARE @columnname nvarchar(100), @sql nvarchar(500)

SELECT @columnname = ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3'

SET @sql = 'SELECT ' + @columnname + ' FROM mytable'

EXEC @sql

Ответ 3

Я бы очень рекомендовал против таких сложных ответов.

Как уже указывалось ниже, ваш вопрос, вы должны проверить этот ответ:

Доступ к столбцам таблицы по индексу вместо имени в хранимой процедуре SQL Server

Спецификация SQL не построена для динамической схемы в DDL или DML.

Примите его и не используйте числа для столбцов в SELECT. Он будет менее результативным, менее читаемым и, очевидно, сработает, если вы измените схему.

Ответ 4

Используйте UNPIVOT для преобразования столбцов в строки. Идет примерно так:

F1 F2 F3 F4 F5 F6 F7 F8 F9 F10

124000 124001 124002 124003 124004 124005 124006 124007 124008 124009

- Преобразует столбцы в строки в таблице # JobNos1

ВЫБЕРИТЕ JobNo INTO # JobNos1 ОТ

(ВЫБЕРИТЕ F1, F2, F3, F4, F5, F6, F7, F8, F9, F10 ОТ #YourTable) AS cp

UNPIVOT

(JobNo FOR JobNos IN (F1, F2, F3, F4, F5, F6, F7, F8, F9, F10)) AS up

124000

124001

124002

124003

124004

124005

124006

124007

124008

124009

- Нужен способ выбрать строку, чтобы # строка была добавлена в # JobNos2

CREATE TABLE # JobNos2 (JobNo int, Row int)

INSERT INTO # JobNos2

SELECT JobNo, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Row from # JobNos1

Тогда вы можете сделать что-то вроде этого:

SET @jobno = ВЫБРАТЬ JobNo из # JobNos2, где Row = @SomeRowNumber

Ответ 5

В MySQL вы можете использовать

SELECT * FROM mytable LIMIT 2,1;

2 = номер строки, которую вы хотите запустить.

1 = количество строк, которые вы хотите выбрать, начиная с предыдущего номера.

Я надеюсь, что это было полезно.