2015-02-28 3 views
0

Я хочу написать запрос, который будет отображаться следующий результатSQL Server: объединить две строки в одну

ОТ

ID  Contract#   Market 
    1  123kjs    40010 
    1  123kjs    40011 
    2  121kjs    40098 
    2  121kjs    40099 

К

ID  Contract#   Market 
    1  123kjs    40010,40011 
    2  121kjs    40098,40099 
+1

Пожалуйста, покажите, что вы пробовали. –

+0

Я пробовал, если заявление на excel .. Думал, будет проще писать sql-запрос. –

+0

Используете ли вы SQL Server? –

ответ

0

Попробуйте этот запрос, я использую GROUP_CONCAT, чтобы поменять поля столбца на 1 строку.

Также обратите внимание, что вы должны переименовать FROM clause с именем вашей таблицы.

SELECT ID,Contract#, GROUP_CONCAT(Market SEPARATOR ',') 
    FROM nameOfThatTable GROUP BY ID; 
0

Попробуйте это. Я использовал PIVOT, чтобы решить эту проблему.

SELECT 
     ID, 
     Contract#, 
     ISNULL(CONVERT(varchar,[40010]) + ',' + CONVERT(varchar,[40011]), 
     CONVERT(varchar,[40098]) + ',' + CONVERT(varchar,[40099])) AS Market FROM 
    (SELECT * FROM ContractTable) AS A 
    PIVOT(MIN(Market) FOR Market IN ([40010],[40011],[40098],[40099])) AS PVT 
    ORDER BY ID 
0

Вы можете использовать ', ' + CAST(Market AS VARCHAR(30)) в подзапрос и присоединиться к Id и Contract# суб-запроса с внешним запросом, чтобы получить значения Market в разделенных запятыми для каждого Id и Contract#.

SELECT DISTINCT ID,Contract#, 
SUBSTRING(
     (SELECT ', ' + CAST(Market AS VARCHAR(30)) 
     FROM #TEMP T1 
     WHERE T2.Id=T1.Id AND T2.Contract#=T1.Contract#    
     FOR XML PATH('')),2,200000) Market 
FROM #TEMP T2 
  • Click here для просмотра результата

Примечания
.........

Если вы хотите получить CSV значения только Id, удалите T2.Contract#=T1.Contract# из подзапроса.

+0

Получил ли выход? Пожалуйста, ответьте @Bibek Shrestha –

+1

Я использую 'STUFF (, 1, 2, '')' вместо 'SUBSTRING (<выражение, 2, <некоторое большое число>)', поскольку он избегает ошибки, когда выражение становится больше чем произвольно выбранное большое число. Но это идиоматический путь. –

Смежные вопросы