Я работаю / учусь на базе sakila , и я пытаюсь конвертировать в T- SQL и использовать с SQL Сервером. У меня возникли некоторые проблемы с преобразованием представления из MySql в T- SQL.
. Я проверил большинство статей здесь, в которых говорится о том, чтобы убрать агрегатную функцию из запроса, но я плохо понимаю что они означают.
В MySql вид выглядит следующим образом:
CREATE VIEW `actor_info` AS
select `a`.`actor_id` AS `actor_id`,`a`.`first_name` AS `first_name`,`a`.`last_name` AS `last_name`,
group_concat(
distinct concat(`c`.`name`,': ',
(
select group_concat(`f`.`title` order by `f`.`title` ASC separator ', ')
from ((`film` `f`
join `film_category` `fc` on((`f`.`film_id` = `fc`.`film_id`)))
join `film_actor` `fa` on((`f`.`film_id` = `fa`.`film_id`)))
where ((`fc`.`category_id` = `c`.`category_id`)
and (`fa`.`actor_id` = `a`.`actor_id`))
))
order by `c`.`name` ASC separator '; ') AS `film_info`
from (((`actor` `a`
left join `film_actor` `fa` on((`a`.`actor_id` = `fa`.`actor_id`)))
left join `film_category` `fc` on((`fa`.`film_id` = `fc`.`film_id`)))
left join `category` `c` on((`fc`.`category_id` = `c`.`category_id`)))
group by `a`.`actor_id`,`a`.`first_name`,`a`.`last_name`
, и я попытался в T- SQL с этим:
CREATE VIEW [actor_info]
AS
SELECT
a.first_name AS [First Name], a.last_name AS [Last Name],
STRING_AGG(CONCAT(c.name,':',
(
SELECT STRING_AGG(f.title, ', ')WITHIN GROUP (ORDER BY f.title)
FROM film f
join film_category fc ON f.film_id = fc.film_id
join film_actor fa ON f.film_id = fa.film_id
WHERE fc.category_id = c.category_id
and fa.actor_id = a.actor_id
)
),';')WITHIN GROUP (ORDER BY c.name) AS [Film Info]
FROM
actor a
LEFT JOIN
film_actor fa ON a.actor_id = fa.actor_id
LEFT JOIN
film_category fc ON fa.film_id = fc.film_id
LEFT JOIN
category c ON fc.category_id = c.category_id
GROUP BY
a.first_name, a.last_name
GO
Результаты, полученные из базы данных MySql, представлены в этом формате, и я хочу добиться того же в SQL Сервер:
first_name last_name film_info
PENELOPE GUINESS Animation: ANACONDA CONFESSIONS; Children: LANGUAGE COWBOY; Classics: COLOR PHILADELPHIA, WESTWARD SEABISCUIT; Comedy: VERTIGO NORTHWEST; Documentary: ACADEMY DINOSAUR; Family: KING EVOLUTION, SPLASH GUMP; Foreign: MULHOLLAND BEAST; Games: BULWORTH COMMANDMENTS, HUMAN GRAFFITI; Horror: ELEPHANT TROJAN, LADY STAGE, RULES HUMAN; Music: WIZARD COLDBLOODED; New: ANGELS LIFE, OKLAHOMA JUMANJI; Sci-Fi: CHEAPER CLYDE; Sports: GLEAMING JAWBREAKER;
NICK WAHLBERG Action: BULL SHAWSHANK; Animation: FIGHT JAWBREAKER; Children: JERSEY SASSY; Classics: DRACULA CRYSTAL, GILBERT PELICAN; Comedy: MALLRATS UNITED, RUSHMORE MERMAID; Documentary: ADAPTATION HOLES; Drama: WARDROBE PHANTOM; Family: APACHE DIVINE, CHISUM BEHAVIOR, INDIAN LOVE, MAGUIRE APACHE; Foreign: BABY HALL, HAPPINESS UNITED; Games: ROOF CHAMPION; Music: LUCKY FLYING; New: DESTINY SATURDAY, FLASH WARS, JEKYLL FROGMEN, MASK PEACH; Sci-Fi: CHAINSAW UPTOWN, GOODFELLAS SALUTE; Travel: LIAISONS SWEET, SMILE EARRING;
Я не могу понять, какой правильный синтаксис ... Спасибо, если вы можете помочь / направить меня по правильному синтаксису. Заранее спасибо.