объединять таблицы и возвращать несколько строк с одинаковым основным идентификатором в виде отдельных строк

0

У меня есть две таблицы, которые нужно объединить, а затем результат нескольких строк с тем же crb_pi_id из таблицы2, объединит и вернется как отдельные строки. возможно? Я использовал этот результат в отчете для печати.

Спасибо заранее.

таблица1:

crb_pi_id,name,tel_no
1,john,1111111
2,paul,2222222

таблица2:

crb_pd_id,crb_pi_id,account_name,amount
1,1,salary,500
2,1,utilities,800
3,2,transportation,300

результат должен

name,salary,utilities,trasportation

john,500,800,0
paul,0,0,300
Теги:

3 ответа

0

не уверен, что вы действительно можете сделать это с прямым sql в стороне от использования курсора, а переменной temp присваиваются значения каждого значения ячейки последовательно. или если вы можете использовать язык более высокого уровня, вы можете использовать php-комбинацию implode() и строку concat в массиве из вашего запроса.

отредактируйте 1: oh неважно... вопрос изменился сразу после того, как я отправил свой ответ haha ​​

edit 2: возможно, вам нужно что-то вроде этого? (непроверенный псевдо)

select
    t1.name,
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'salary') then t2.amount else 0 end as 'salary'
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'utilities') then t2.amount else 0 end as 'utilities'
    case when (t2.crb_pi = t1.crb_pi) and (t2.account_name = 'transportation') then t2.amount else 0 end as 'transportation'    
from table1 t1
left join table2 t2
    on t2.crb_pi = t1.crb_pi
  • 0
    извините за повторное редактирование и восстановление. новичок в этом сайте, все еще выясняющий, как делать вещи с ответами, комментариями и прочим :)
  • 0
    привет, инопланетянин, я попробовал твой код, но на выходе все еще несколько строк вот код, который я использовал, основываясь на вашем предложении, выберите t1.name, случай, когда (t2.crb_pi_id = t1.crb_pi_id) и (t2.account_code = 'salary'), затем t2.amount, иначе 0 заканчиваются как 'salary', случай, когда (t2.crb_pi_id = t1.crb_pi_id) и (t2.account_code = 'utilities'), затем t2.amount else 0 заканчиваются как 'utilities', случай, когда (t2.crb_pi_id = t1.crb_pi_id) и (t2.account_code = 'trasproduction '), затем t2.amount иначе 0 завершается как' trasproduction 'из crb_personal_info t1, оставленное соединение crb_personal_details t2 на t2.crb_pi_id = t1.crb_pi_id
0
select a.name, a.tel_no, sum(b.amount) as totamount

from table1 a left outer join table2 b on a.crb_pi_id = b.crb_pi_id
group by a.name, a.tel_no

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

  • 0
    Привет, Радж, я хочу объединить несколько выходных строк в одной строке, но должно отображать поле в другом столбце.
0

Здесь вы можете использовать предложение, а затем группировать результаты соответственно.

select t1.name 'name', t2.amount 'salary',
CASE WHEN t2.crb_pi_id=t1.crb_pi_id and t2.crb_pd_id=2 then t2.amount ELSE 0 END 'utilities',
CASE WHEN t2.crb_pi_id=t1.crb_pi_id and t2.crb_pd_id=3 then t2.amount ELSE 0 END 'trans'
into #t3
from #t1 t1 inner join #t2 t2 on t1.crb_pi_id=t2.crb_pi_id

select name, max(salary), max(utilities), max(trans)
from t3
group by name
  • 0
    привет anil, Itried ваш код, но было сообщение об ошибке (# 1064 - у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL для правильного синтаксиса для использования рядом с 'WITH t3 (name, salary, утилиты) как (выберите t1.name, t2.amount 'salary', C 'в строке 1)
  • 0
    Моя ошибка .. mySQL не поддерживает предложение WITH. Таким образом, вы можете использовать временную таблицу вместо. Я отредактировал свой пост. # t1 и # t2 представляют ваши две таблицы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню