Можно ли в SQL вернуть первую строку с именами атрибутов, а затем значения - PullRequest
3 голосов
/ 31 августа 2011

Мне интересно, есть ли способ написать SQL так, чтобы он возвращал мне результат, как обычно, но сейчас, в первой строке, которая также возвращает имена атрибутов.

Чтобы объяснить, что я имею в виду:

скажем, у вас есть таблица "test", которая имеет 2 атрибута "id" и "name":

id name
1  nik
2  tst

query:

SELECT * FROM test; 

производит:

1 nik
2 tst

, но я хочу, чтобы это было так:

id name
1 nik
2 tst

Возможно ли это?

edit: Я использую PostreSQL

Ответы [ 5 ]

4 голосов
/ 31 августа 2011

Вы не можете вернуть имена и фактические значения столбцов в результате single , если вы не отказываетесь от реальных типов данных (что, вероятно, не то, что вы хотите).

Ваш пример смешивает символьные данные и числовые данные в столбце id, и Postgres (по праву) откажется возвращать такой набор результатов.

Редактировать :
Я проверил «объединенное» решение, данное, например. JNK, и он терпит неудачу (как и ожидалось) на Postgres, Oracle и SQL Server именно из-за несовпадающих типов данных. MySQL следует своим обычным привычкам - не выбрасывать ошибки и просто конвертировать все в символы.

2 голосов
/ 31 августа 2011

Очень общий ответ, поскольку вы не предоставляете СУРБД:

SELECT id, name FROM(
SELECT 'id' as 'id', 'name' as 'name', 1 as 'Rank'
UNION ALL
SELECT *, 2 as 'Rank' FROM test) as X
ORDER BY [RANK]

РЕДАКТИРОВАТЬ

Спасибо Мартину за указание на необходимость ORDER BY

0 голосов
/ 31 августа 2011

В зависимости от ваших инструментов / техники, но вот пара:

  1. Если вы используете SSMS (Sql-Server) и хотите скопировать / вставить результаты с заголовками столбцов:

    • Окно запроса ->
    • R-Click
    • Результаты ->
    • Сетка или текст ->
    • Установите флажок «Включить заголовки столбцов в набор результатов»

  2. Если вы используете Sql-сервер, вы можете запрашивать мета-таблицы (sys.columns и т. Д.)

  3. Если вы используете элемент управления с привязкой к данным ASP.NET, у вас обычно есть доступ к методам или свойствам (sqldatareader.getname (i) и т.

В любом случае - зависит только от слоя, из которого вы пытаетесь получить имена, - если это не поможет, отредактируйте / измените метку вашего вопроса, чтобы мы могли сосредоточиться на любом инструменте, который вы хотите используйте для этого.

РЕДАКТИРОВАТЬ для PostgresSQL

  1. Если вы используете PostgresSQL, вы можете запрашивать мета-таблицы (information_schema.columns и т. Д.)

0 голосов
/ 31 августа 2011

Я согласен с OMG Ponies выше, способ получить эти метаданные обычно из интерфейса, который вы используете.

например, модуль Perl DBI имеет метод fetchrow_hashref, где столбцы возвращаемой строкивозвращается в виде ассоциативного массива (хеш), где имена столбцов являются ключами.

print $ ref -> {'name'};# выводит nik или tst

Обновление: я забыл добавить, что некоторые из этих интерфейсных слоев имеют метод, который возвращает имена столбцов, и вы можете использовать его вместо добавления имен в набор результатов.Метод DBI, который вы бы использовали, был бы $ sth -> {NAMES} -> [0] вернул бы имя первого столбца.

0 голосов
/ 31 августа 2011

Предполагая, что вы находитесь на SQL Server, вы можете получить имена столбцов определенной таблицы, используя этот запрос:

select column_name 'Column Name', data_type 'Data Type'
from information_schema.columns
where table_name = 'putYourTableNameHere'

Тогда вам придется объединять свои вещи вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...