2013-04-30 1 views
1

Хорошо, я попытаюсь объяснить это как можно лучше.MSSQL Соединение 3 Таблицы с более чем 1 строкой для результата одной строки по нескольким записям

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

В одной из таблиц есть два или более результатов по нескольким строкам, которые мне нужно вернуть в отдельные столбцы.

На приведенной ниже диаграмме (надеюсь, это объясняет это лучше), T2.ColA подключен к T3.ColA и T1, ColA подключен к T2.ColB.

В ColC T1 есть последняя запись. Это единственные, которые необходимы для результатов. Обратите внимание, что ColC может быть разными датами между строками 1 и 2, например. Но он необходим для каждого ColB на основе ColA.

Но в T1 есть два ряда, которым требуется Col B, чтобы вернуться к результату в отдельных столбцах.

DB Example

Кстати, это только одна запись - там будут тысячи строк, которые должны возвращать результат - не только 1.

Позвольте мне знать, если вам нужно больше информации.

+0

И что должно произойти, если в таблице 1 есть 3 строки со значениями, например '1123',' 3211' и '3333'? Какие два варианта следует выбрать? Или вам нужны три столбца в этом случае? А что, если в таблице 1 есть только 1 строка? –

+0

На самом деле есть. Таким образом, запрос должен будет указывать только на поиск последних 1123 и 3211. Может быть 1 запись для 123, но она будет содержать строки для 1123 и 3211, а также для других, таких как 3333 и 4444 и т. Д., На которые будут указаны ссылки через 123 – Rik

ответ

0

Попробуйте этот запрос

select t1.cola,t2.cola,t1.colb,t2.colb,t3.colb FROM table2 t2 INNER JOIN table1 t1 ON t1.cola = t2.colb INNER JOIN table3 ON t3.cola =t2.cola 
0

Возможно, это может решить ваш вопрос ..

SELECT T1.COLA, T1.COLB, T2.COLA, T2.COLA 
FROM 
TABLE1 T1 INNER JOIN TABLE2 T2 
INNER JOIN TABLE3 T3 
WHERE 
T1.COLC = (
SELECT MAX(T4.COLC) FROM TABLE1 T4 WHERE T4.COLA = T1.COLA 
) 

** Но, как вы указали в раскопе, это не возможно, чтобы отобразить 1123, 3211 в один ряд. Он должен быть в двух разных строках, динамически изменяется в зависимости от количества строк. Вы можете изменить, как хотите, с помощью своего внешнего приложения.

+0

он может использовать вспомогательный запрос и concat, чтобы вернуть его в виде строки, разделенной запятой, из таблицы множественного выбора, тогда ему просто нужно сделать немного php, чтобы отсортировать ее после – Dave

+0

. Да, он может добиться этого используя разделитель. Но колонка для каждой записи, я так не думаю. – Prashanth

+0

ofc он может 'SELECT t1.stuff, t3.stuff, (выберите concat (", ", column) FROM tbl2 где tbl2.ID = tbl1.subid) как T2string JOINs .... inners..stuff.' – Dave