2013-11-15 4 views
1

Мне нужно немного помочь получить нужные результаты. У меня есть 2 таблицы с общим полем id. Я хочу, чтобы объединить значения из таблицы B, которые имеют один и тот же idВыберите поле из таблицы A, где подзаборка из таблицы B = таблица A поле

Таблица A

id | name | somevalue1 
1 | dud | 12345 
2 | duda | 8908 

Таблица B

id | somevalue2 
1 | 56545 
2 | 545665 
1 | 89875 
2 | 12524 

Желаемая Результат

id | somevalue2 combined 
1 | 56545, 89875 
2 | 545665, 12524 

Я попытался использовать Join, но я немного потерян. Я пытаюсь выполнить подзапрос, но единственный способ, с помощью которого я могу заставить его работать, - это связать основной запрос из подзаголовка, но также и его gettin.

Этот запрос я пытался просто виснет:

select distinct a.id,(
    select b.somevalue2 + ', ' as [text()] from tableB b 
    where b.id = a.id and b.somevalue2 is not null for xml path('')) 
    as [ColumnName] 
from tableA a 
order by a.id asc 

EDIT

Я думаю, что нужно отметить, что TableB имеет более чем 400 000 строк. Таблица A имеет только около 1500 рядов.

+2

Возможно, вы можете найти помощь в [этом другом вопросе] (http://stackoverflow.com/q/17591490/1385896) –

+0

Мне просто интересно, верны ли в результатах под «Желаемые результаты». Значения в 'somevalue2 объединены', похоже, не имеют значений из' Table A' –

+0

@SecretSquirrel, который предназначен – OGHaza

ответ

3

Это работает:

SELECT A.*, 
     STUFF((
       SELECT ', ' + CAST([somevalue2] AS VARCHAR(20)) 
       FROM TableB B 
       WHERE A.id = B.id 
       FOR XML PATH ('')), 1, 1, '') 
FROM TableA A 

Here is an sqlfiddle для вас попробовать.

+0

Ницца, 1, чтобы помнить. – OGHaza

+0

Спасибо! Однако запрос занимает много времени. TableB имеет более 400 000 строк. Есть ли другой способ сделать это? – ckpepper02

+1

@ ckpepper02 Не так много способов быстрой сгруппировки групп на SQL Server. Убедитесь, что TableB имеет индекс на 'id' (даже лучше, если индекс включает columm' somevalue2', что-то вроде 'CREATE INDEX I_test ON TableB (id) INCLUDE (somevalue2);') – Lamak

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