Как объединить столбцы во временной таблице при вставке данных из подзапроса в SQL? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть временная таблица #TestData, как показано ниже, где данные вставляются с использованием подзапроса

Id      Amount         Ccy    Description
2012    2373350.000    INR    test1
2012    2321030.000    INR    test12
2014    2350.000       INR    test4
2014    30.000         USD    test5
2014    130.000        USD    test6

обновленный код: использование вещи и группы по для объединения строк при получении ошибки неверный объект Tmpta

      INSERT  INTO #TestData

       -- SELECT  Tmpta.Id,Tmpta.Amount,Tmpta.Ccy,tmpta.Description
     SELECT  Tmpta.Id ,
                    STUFF(( SELECT  ',' + CAST(B.[Amount] AS VARCHAR(20))
                            FROM    Tmpta B
                            WHERE   B.id = Tmpta.id
                            ORDER BY B.[Amount]
                          FOR
                            XML PATH('')
                          ), 1, 1, '') AS Amount ,
                    STUFF(( SELECT  ',' + B.[cur]
                            FROM    Tmpta B
                            WHERE   B.id = Tmpta.id
                            ORDER BY B.[cur]
                          FOR
                            XML PATH('')
                          ), 1, 1, '') AS Ccy ,
                    STUFF(( SELECT  ',' + B.[Description]
                            FROM    Tmpta B
                            WHERE   B.id = Tmpta.id
                            ORDER BY B.[Description]
                          FOR
                            XML PATH('')
                          ), 1, 1, '') AS Description
         FROM    ( SELECT SubQuery
                  ) Tmpta              

         WHERE   tmpta.Id in (2012,2014)
         group by Tmpta.id

Я хочу объединить данные, как показано ниже:

Id      Amount                         Ccy          Description
2012    2373350.000,2321030.000        INR,INR      test1,test12
2014    2350.000,30.000,130.000        INR,USD,USD  test4,test5,test6

Есть идеи, как нам этого добиться?

Пожалуйста, помогите. Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

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

DROP TABLE # Tmpta

SELECT ID, Сумма, cur, Описание INTO #Tmpta из данных A

SELECT # Tmpta.Id, STUFF ((SELECT ',' + CAST (B. [Amount] AS VARCHAR (20)) FROM #Tmpta B WHERE B .id = # Tmpta.id ORDER BY B. [Amount] FOR XML PATH ('')), 1, 1, '') AS Amount, STUFF ((SELECT ',' + B. [cur] FROM # Tmpta B WHERE B.id = # Tmpta.id ЗАКАЗАТЬ B. B. [cur] FOR XML PATH ('')), 1, 1, '') AS Ccy, STUFF ((SELECT ',' + B. [ Описание] ОТ #Tmpta B, ГДЕ B.id = # Tmpta.id ЗАКАЗАТЬ B. [Описание] ДЛЯ XML PATH ('')), 1, 1, '') AS Описание ОТ #Tmpta

     WHERE   #Tmpta.Id in (2012,2014)
     group by #Tmpta.id  
0 голосов
/ 14 февраля 2020

попробуйте ниже запроса

    SELECT
    ID,  string_agg(Amount,',') As Amount, string_agg(ccy,',') as CCY, string_agg(description, ',')  
FROM
    <table name>
GROUP BY
    ID;
...