Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как представить данные из многих строк в виде одной строки?  [new]
Удирающий_от_Access
Member

Откуда: Израиль
Сообщений: 87
Есть исходная таблица:

CREATE TABLE [dbo].[Test_MyTable](
	[UserID] [int],
	[QuestionID] [int],
	[TextData] [nvarchar](50)
) 

INSERT INTO [Test_MyTable] VALUES (1,227,N'aннекaa')
INSERT INTO [Test_MyTable] VALUES (1,228,N'aрпвыaaa')
INSERT INTO [Test_MyTable] VALUES (2,227,N'aaпавпaa')
INSERT INTO [Test_MyTable] VALUES (2,228,N'aпраппарaa')
INSERT INTO [Test_MyTable] VALUES (3,227,N'aaропроaa')
INSERT INTO [Test_MyTable] VALUES (3,228,N'aываыaaa')

Надо представить данные в такой форме:

UserID | Question_227 | Question_228
-------------------------------------
1 | aннекaa | aрпвыaaa
2 | aaпавпaa | aпраппарaa
3 | aaропроaa | aываыaaa
---------------------------------------

Какие инструменты есть у Microsoft, чтобы это сделать? Покажите, пожалуйста, пример?
19 июл 11, 15:01    [10995308]     Ответить | Цитировать Сообщить модератору
 Re: Как представить данные из многих строк в виде одной строки?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
топ 10 вопрос 10.
19 июл 11, 15:08    [10995347]     Ответить | Цитировать Сообщить модератору
 Re: Как представить данные из многих строк в виде одной строки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Удирающий_от_Access,

если количество вопросов жёстко задано, то:
  • для версий >=9.0 - PIVOT
  • для всех версий - MIN(CASE WHEN ... THEN ... ELSE ... END)
    eсли количество неизвестно, то только формировать динамический SQL с запросом указанного вида.
  • 19 июл 11, 15:10    [10995373]     Ответить | Цитировать Сообщить модератору
     Re: Как представить данные из многих строк в виде одной строки?  [new]
    gds
    Member

    Откуда: Железнодорожный
    Сообщений: 1842
    Блог
    Удирающий_от_Access,
    Можно и так
    create table #t(
    fl varchar(10)
    )
    
    select * from #t
    
    declare @w varchar(max)
    set @w = '';
    
    select @w=@w+fl from #t
    
    print 'res ' + @w
    


    fl
    ----------
    qwe
    rty
    123456

    res qwerty123456

    19 июл 11, 17:02    [10996197]     Ответить | Цитировать Сообщить модератору
     Re: Как представить данные из многих строк в виде одной строки?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47142
    gds
    Удирающий_от_Access,
    Можно и так
    create table #t(
    fl varchar(10)
    )
    
    select * from #t
    
    declare @w varchar(max)
    set @w = '';
    
    select @w=@w+fl from #t
    
    print 'res ' + @w
    


    fl
    ----------
    qwe
    rty
    123456

    res qwerty123456

    Он же хочет в разных колонках, судя по всему
    19 июл 11, 17:04    [10996216]     Ответить | Цитировать Сообщить модератору
     Re: Как представить данные из многих строк в виде одной строки?  [new]
    gds
    Member

    Откуда: Железнодорожный
    Сообщений: 1842
    Блог
    iap
    gds
    Удирающий_от_Access,
    Можно и так
    create table #t(
    fl varchar(10)
    )
    
    select * from #t
    
    declare @w varchar(max)
    set @w = '';
    
    select @w=@w+fl from #t
    
    print 'res ' + @w
    


    fl
    ----------
    qwe
    rty
    123456

    res qwerty123456

    Он же хочет в разных колонках, судя по всему

    А, ну тогда только Pivot.
    19 июл 11, 17:06    [10996226]     Ответить | Цитировать Сообщить модератору
     Re: Как представить данные из многих строк в виде одной строки?  [new]
    Уленшпигель
    Member

    Откуда:
    Сообщений: 115
    Удирающий_от_Access
    Есть исходная таблица:

    CREATE TABLE [dbo].[Test_MyTable](
    	[UserID] [int],
    	[QuestionID] [int],
    	[TextData] [nvarchar](50)
    ) 
    
    INSERT INTO [Test_MyTable] VALUES (1,227,N'aннекaa')
    INSERT INTO [Test_MyTable] VALUES (1,228,N'aрпвыaaa')
    INSERT INTO [Test_MyTable] VALUES (2,227,N'aaпавпaa')
    INSERT INTO [Test_MyTable] VALUES (2,228,N'aпраппарaa')
    INSERT INTO [Test_MyTable] VALUES (3,227,N'aaропроaa')
    INSERT INTO [Test_MyTable] VALUES (3,228,N'aываыaaa')

    Надо представить данные в такой форме:

    UserID | Question_227 | Question_228
    -------------------------------------
    1 | aннекaa | aрпвыaaa
    2 | aaпавпaa | aпраппарaa
    3 | aaропроaa | aываыaaa
    ---------------------------------------

    Какие инструменты есть у Microsoft, чтобы это сделать? Покажите, пожалуйста, пример?


    Для этого у майкрософт есть INNER JOIN :)

    SELECT a.UserID, a.QuestionId, b.QuestionId 
    FROM (SELECT UserID, QuestionID, TextData 
             FROM Test_MyTable 
             WHERE QuestionId % 2 = 1) as a
    JOIN (SELECT UserID, QuestionID, TextData 
             FROM Test_MyTable 
             WHERE QuestionId % 2 = 0) as b
    ON a.UserId = b.UserId and b.QuestionId = a.QuestionId + 1
    20 июл 11, 10:25    [10998482]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить