Это даст вам выход вы прицеливание для с данными выборки:
with x as (
select
row_number() over (partition by t1.Serial order by t1.Serial) as [RN],
t1.Serial,
case when t3.Sub_Test_Name = 'AAA' then t3.Value end as [AAA],
case when t3.Sub_Test_Name = 'BBB' then t3.Value end as [BBB],
case when t3.Sub_Test_Name = 'CCC' then t3.Value end as [CCC],
case when t3.Sub_Test_Name = 'DDD' then t3.Value end as [DDD]
from Table_1 t1
inner join Table_2 t2 on t2.Table_1_Id = t1.Id
inner join Table_3 t3 on t3.Table_2_Id = t2.Id
)
select
x.Serial,
AAA.AAA,
BBB.BBB,
CCC.CCC,
DDD.DDD
from x
left outer join x AAA on AAA.Serial = x.Serial and AAA.RN = x.rn + 0
left outer join x BBB on BBB.Serial = x.Serial and BBB.RN = x.rn + 1
left outer join x CCC on CCC.Serial = x.Serial and CCC.RN = x.rn + 2
left outer join x DDD on DDD.Serial = x.Serial and DDD.RN = x.rn + 3
where x.rn = 1
Это использует сам присоединяется, как вы упомянули (где вы видите x
Оставшись присоединился к себе несколько раз в финале выберите заявление).
Я намеренно добавил дополнительные столбцы CCC
и DDD
, поэтому проще понять, как вы могли бы построить это для большего набора данных, увеличивая смещение row_number для каждого соединения.
Я тестировал это в SQL Fiddle, и вы можете поиграть с ним. Если вам необходимо применить дополнительные фильтры, ваше предложение where
должно быть размещено внутри CTE.
Обратите внимание, что вы эффективно поворачиваете данные с помощью такого запроса (за исключением того, что мы не агрегируем что-либо, поэтому мы не можем использовать встроенную опцию PIVOT
). Недостатком этого метода и реальных опор является то, что вам нужно вручную указать каждый заголовок столбца со своим собственным оператором в CTE и левым объединением в окончательном выборе. Это может стать громоздким в средних наборах данных, поэтому оно лучше всего подходит в случаях, когда у вас будет небольшое количество известных заголовков столбцов в ваших результатах.
Пожалуйста, приложите свои структуры таблиц и выходные данные (вместе с данными образца) как часть вопроса, а не как ссылку на изображение. Вопрос/ответы будут бесполезны для других людей в будущем, если они содержат мертвые ссылки на соответствующую информацию. http://stackoverflow.com/help/how-to-ask –
Также укажите, что вы пробовали до сих пор. –
Можете ли вы показать нам, что у вас есть? – GabrielVa