транспонировать строки в столбцы без агрегата (сводная) - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующая таблица в SQL Server:

CREATE TABLE yourtable
( 
      [ID] int,
      [FORMID] int,
      [NAME] VARCHAR(30), 
      [VALUE] VARCHAR(30), 
      [CREATED] datetime,
);

INSERT INTO yourtable ([ID], [FormID], [NAME], [VALUE], [CREATED])
VALUES
    (1, 1, 'First N', 'A b', '2018-01-01'),
    (2, 1, 'Last N', 'c d', '2018-01-01'),
    (3, 1, 'Email', 'a@GM', '2018-01-01'),
    (4, 2, 'First N', 'a b2', '2018-01-01'),
    (5, 2, 'Last N', 'c d2', '2018-01-01'),
    (6, 2, 'Email', 'c@GM2', '2018-01-01');

Мне нужно вывести что-то вроде этого, если нужно добавить дополнительный столбец, не будет возражать.

First N | Last N
--------+--------
A b     | c d
a b2    | c d2

Большое спасибо,

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Не лучший способ, но для времени я использовал подзапросы

Select
   formid as fid,
   (Select value from yourtable where Name = 'First Name' and formid=fid) as FirstName,
   (Select value from yourtable where Name = 'Last Name' and formid=fid) as LastName
From yourtable
0 голосов
/ 23 октября 2018

Разделите вашу таблицу на две таблицы, как показано ниже, и на основе столбца автоматического приращения вы можете объединить их, чтобы получить комбинацию имени и фамилии.Конечно, я предполагаю LOT вещей из ваших данных таблицы:)

declare @yourtable table
    ([NAME] varchar(30), [VALUE] varchar(30))
;

INSERT INTO @yourtable
    ([NAME], [VALUE])
VALUES
    ('First N', 'A b'),
    ('Last N', 'c d'),
    ('Email', 'a@GM'),
    ('First N', 'a b2'),
    ('Last N', 'c d2'),
    ('Email', 'c@GM2')

    declare @firstName table(id int identity(1,1),[First N] varchar(100))
    declare @lastName table(id int identity(1,1),[Last N] varchar(100))

    Insert Into @firstName([First N])
    select value 
    from @yourtable where name= 'First N'

    Insert Into @lastName([Last N])
    select value 
    from @yourtable where name= 'Last N'

    SELECT [First N],[Last N] FROM  @firstName f LEFT JOIN  @lastName l on f.id = l.id
...