Я должен написать SQL-запрос для нашей системы управления посетителями.
Если быть точным, у меня был такой, но благодаря ошибке построения базы данных или что-то от третьей стороны.Были пропущенные записи из-за пропущенных значений в таблице.Управляющая база данных назначает числовой идентификатор посетителя.Этот идентификатор является единственным реализованным ключом.
Чтобы получить пропавших людей, мне нужно написать запрос к трем таблицам, которые объединены по одному и тому же идентификатору, Visitior ID
.
Мой SQL-запроснапример:
SELECT
ROW_NUMBER() OVER(ORDER BY VisitorBooking.Arrival ASC) AS Nr,
Personalstamm.idPersonalstamm,
CASE VisitRating.rating
WHEN 3 THEN 'Sehr Gut'
WHEN 2 THEN 'Gut'
WHEN 1 THEN 'Nicht so Gut'
ELSE 'Sonstiges'
END AS Bewertung,
VisitRating.Comment,
VisitorBooking.Arrival,
Personalstamm.Name,
Personalstamm.FirstName,
Personalstamm.Company,
Personalstamm.Stadt
FROM
Personalstamm
INNER JOIN
VisitRating ON Personalstamm.idPersonalstamm = VisitRating.idPersonalstamm
INNER JOIN
VisitorBooking ON Personalstamm.idPersonalstamm = VisitorBooking.idVisitor
WHERE
Personalstamm.idPersonalstamm IS NOT NULL
ORDER BY
VisitorBooking.Arrival
В Personalstamm
указаны личные даты, такие как имя и так далее.
В VisitRating
есть рейтинг пребывания и комментарий.
И мне нужно Visitorbooking
, чтобы поймать людей, которые не посещают по неизвестным причинам.
Моя проблема в том, что он делает то, что должен, но строит нежелательный продукт из каршиана из Visitorbooking
и Visitor Rating
.Что я могу сделать, чтобы не получить это?
Distinct не работал, Group By также не работал.
Пример данных:
Personalstamm :
Name: x
Firstname: MR.
Primary Key ID: 1
Company: X-Files
Town: Gravity Falls
VisitorBooking :
Arrival: 06.13.2018 00:00:00
Departure: 01:30:57
ID Visitor: 1
VisitRating :
Rating: 3
Comment: I'm anonymous
Date: 06.13.2018
Foreign Key ID: 1
Это должно понравиться
1 MR. X Gravity Falls 06.13.2018 Sehr Gut I'm anonymous.
Но естьбыло несколько случаев, когда все из Visitrating
было пустым, поэтому мне пришлось переписать, чтобы получить:
1 MR. X Gravity Falls 06.13.2018 00:00:00 NULL NULL.
Я заменил дату на прибытие.
Но что я получаю, когда он посещает более одного разаэто:
1 MR. X Gravity Falls 06.13.2018 00:00:00 Sehr Gut NULL.
1 MR. X Gravity Falls 06.13.2018 00:00:00 GUT NULL.
1 MR. X Gravity Falls 06.13.2018 00:00:00 Nicht so GUT NULL.
1 MR. X Gravity Falls 07.13.2018 00:00:00 Sehr Gut NULL.
1 MR. X Gravity Falls 07.13.2018 00:00:00 GUT NULL.
1 MR. X Gravity Falls 07.13.2018 00:00:00 Nicht so GUT NULL.