SulfySul Ответов: 2

Получить имена столбцов и данных для строк в SQL


Привет всем, у меня есть sql-таблица с основными сведениями о сотрудниках, как показано ниже

таблица: tblEmployees
EmpID     Name       Contact     Sex
100       John       55555        M
200       Kate       44444        F
300       Sam        88888        M


Я хотел бы получить следующий результат запроса конкретного сотрудника, где EmpID=200

Col1         Col2
EmpID        200
Name         Kate
Sex          F


Что я уже пробовал:

я пробовал играть с pivot и unpivot , но не смог добиться того же самого. Любая помощь будет высоко оценена.
Т

2 Ответов

Рейтинг:
2

OriginalGriff

UNPIVOT-это то, что вам нужно.
Попробуй:

SELECT Col2, Col1 FROM (SELECT * FROM tblEmployees WHERE Empid = 200) a
UNPIVOT(Col1 FOR Col2 IN (EmpID, Name, Sex)) AS unp


Viswanatha Swamy

Нужно ли нам выполнять приведение, если столбцы имеют несколько типов данных? Пример: идентификатор сотрудника-int, а остальные столбцы-типа varchar.

OriginalGriff

Да. Подумайте об этом: он возвращает таблицу, которая представляет собой набор строк и столбцов. Столбец может содержать только данные одного типа, поэтому, если вы хотите "смешивать и сопоставлять", вам нужно привести их, чтобы убедиться, что они одинаковы.
Замените "*" в списке выбора на нужные столбцы и используйте CAST для их преобразования - вам нужно будет назвать "новые" столбцы, иначе он будет справедливо жаловаться!

Viswanatha Swamy

Добрый вечер. У меня была таблица с уникальным идентификатором varchar, int и DateTime. Я использовал приведенную ниже команду для вывода. Я тестировал в SQL Server Mgt Studio.

Выберите [ColumnName], [ColumnValue]
от здоровья
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ
(
ЦЕННОСТИ
('Идентификатор', литой(идентификатор как varchar(50))),
('Имя', [Имя]),
('Health Parameter1', cast(HealthParameter1 as varchar(10))),
('Health Parameter2', cast(HealthParameter2 as varchar(10))),
('Received At', cast(ReceivedAt as varchar(50)))
) c ([ColumnName], [ColumnValue])
где Id = 'F84BBA87-6241-4E0A-4F42-08D7C291F501';

Maciej Los

5ed!

SulfySul

Да, это ответ на мой вопрос.

Рейтинг:
0

MarcusCole6833

declare @table table ( id int identity(1,1), EMPID varchar(5)  , [Name] varchar(20), contact Varchar(20) , gender char(10))

insert into @table ( empid,  [name], contact, gender) values ('100','John',       '55555',        'M')
insert into @table ( empid,   [name], contact, gender) values ('200','Kate',       '44444',        'F')
insert into @table ( empid,    [name], contact, gender) values ('300','Sam',       '44444',        'M')


declare @kvpTable table (keyVal varchar(20), val varchar(20) , objectKey int )


declare @min int = 0, @max int = 0

select @min = min(id)  , @max = max(id) from @table 
declare @name varchar(20) 
declare @contact varchar(20)
declare @mf char(1)
declare @emp varchar(8)

while @min <= @max
begin
select @emp= empid,  @name = [name], @contact = contact , @mf = gender  from @table where id = @min 

insert into @kvpTable 
select 'EmpID', @emp , @min
union
select 'name', @name, @min
union
select 'contact', @contact, @min
union
select 'gender' ,@mf , @min

set @min = @min + 1
end

select * from @kvpTable


CHill60

Редко, очень редко вам когда-либо нужно использовать цикл в языках, основанных на множествах, таких как SQL