Можно ли выбрать определенные столбцы по количеству столбцов в SQL? Что-то вроде
SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE
Спасибо
Можно ли выбрать определенные столбцы по количеству столбцов в SQL? Что-то вроде
SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE
Спасибо
Для этого вам необходимо использовать динамический 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
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
Я бы очень рекомендовал против таких сложных ответов.
Как уже указывалось ниже, ваш вопрос, вы должны проверить этот ответ:
Доступ к столбцам таблицы по индексу вместо имени в хранимой процедуре SQL Server
Спецификация SQL не построена для динамической схемы в DDL или DML.
Примите его и не используйте числа для столбцов в SELECT. Он будет менее результативным, менее читаемым и, очевидно, сработает, если вы измените схему.
Используйте 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
В MySQL вы можете использовать
SELECT * FROM mytable LIMIT 2,1;
2 = номер строки, которую вы хотите запустить.
1 = количество строк, которые вы хотите выбрать, начиная с предыдущего номера.
Я надеюсь, что это было полезно.