Соедините две таблицы и добавьте результат объединения в колонки Dynami c. - PullRequest
0 голосов
/ 14 апреля 2020

Уважаемые, у меня есть следующие таблицы:

enter image description here

enter image description here

Я соединил таблицы вместе, используя emp_id

enter image description here

Вот таблицы и мое решение. я думаю, что это не идеальное решение, какие-либо идеи, пожалуйста.

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=cdfa3fd85b83ef78812dbfec7ca9d589

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Это можно сделать с помощью некоторой условной агрегации.

select 
  x.emp_id
, x.name
, max(first_ticket) as [first_ticket]
, max(second_ticket) as [second_ticket]
, max(third_ticket) as [third_ticket] 
, max(fourth_ticket) as [fourth_ticket] 
, max(fifth_ticket) as [fifth_ticket] 
from (
select 
  t1.*
, case when t2.RANK_OF_TICKET = 1 then t2.TICKET else null end as [first_ticket]
, case when t2.RANK_OF_TICKET = 2 then t2.TICKET else null end as [second_ticket]
, case when t2.RANK_OF_TICKET = 3 then t2.TICKET else null end as [third_ticket]
, case when t2.RANK_OF_TICKET = 4 then t2.TICKET else null end as [fourth_ticket]
, case when t2.RANK_OF_TICKET = 5 then t2.TICKET else null end as [fifth_ticket]
from t1
left join t2 on t1.emp_id = t2.emp_id
) as x
group by 
  x.emp_id
, x.name
order by x.emp_id
0 голосов
/ 14 апреля 2020

Это то, как вы могли бы добиться этого, используя пивот

select 
  emp_id,
  name, 
  [1] as first_ticket, 
  [2] as [2nd_ticket], 
  [3] as [3rd_ticket], 
  [4] as [4th_ticket], 
  [5] as [5th_ticket]
from (
  select t1.emp_id,
  t1.name,
  t2.TICKET,
  t2.RANK_OF_TICKET 
  from t1 
  left join t2 on t1.emp_id=t2.emp_id) p
PIVOT 
  (
   MIN(TICKET) FOR RANK_OF_TICKET IN ([1],[2],[3],[4],[5])
  ) as pvt
ORDER BY emp_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...