 Занятие №2. Сортировка данных, фильтрация, расчетные значения. Часть 2/2
Так же одинаковые (если значения разные, то они будут автоматически приведены к одному типу типу первого значения, например, при сложении строка+число=строка, а число+строка=число) значения можно складывать (например из двух строк получать одну длинную). Для числовых значений доступны арифметические операции (плюс, минус, умножить, разделить, округление и так далее).
Попробуем написать скрипт, который бы складывал нам полное название ТС, состоящие из названия марки и Гос номера.
Создаем новый скрипт "с нуля" данные о ТС хранятся в таблице [dbo].[FLEET_Object] Имя таблицы марок dbo.FLEET_MarkCar
1. Начнем новый скрипт как всегда с Select | Select |
| 2. Пропустим пока указание колонок, и сразу перейдем к таблице | Select from bn.dbo.FLEET_Object | | 3. Таблице дадим псевдоним O | Select from bn.dbo.FLEET_Object as O |
| 4. Так как нам потребуется Марка, то добавим таблицу марки, через inner join | Select from bn.dbo.FLEET_Object as O inner join |
| 5. Добавим имя таблицы марок, указав псевдоним M | Select from bn.dbo.FLEET_Object as O inner join bn.dbo.FLEET_MarkCar as M |
| 6. Укажем, как связаны наши две таблицы - а связаны они через одноименные колонки MarkCarID, что и напишем после слова on | Select from bn.dbo.FLEET_Object as O inner join bn.dbo.FLEET_MarkCar as M on M.MarkCarID=O.MarkCarID |
| 7. Что бы нам не попадались строки удаленные, сделаем фильтр по колонке ObjectActive таблицы ТС | Select from bn.dbo.FLEET_Object as O inner join bn.dbo.FLEET_MarkCar as M on M.MarkCarID=O.MarkCarID where O.ObjectActive=1 |
| 8. Теперь нужно разобраться, какие именно колонки нам нужны: это Название марки (m.MarkCarName), государственный номер (o.ObjectGosNum), ну и колонка, состоящая из первых трех (Назовем ее "Название"). Название состоит из трех строк, Марка, далее двоеточие и пробел, далее Гос Номер (склеивание строк называется конкатенация). | Select m.MarkCarName as Марка, o.ObjectGosNum as ГосНомер, m.MarkCarName + ': '+o.ObjectGosNum as Название from bn.dbo.FLEET_Object as O inner join bn.dbo.FLEET_MarkCar as M on M.MarkCarID=O.MarkCarID where O.ObjectActive=1 | Выполнить! |
Примерно, что должно получиться приведено на рисунке.
Обращаю ваше внимание, что машины, для которых марка не указана (т.е. в колонке MarkCarID таблицы ТС стоит NULL) в список не попали вообще (это свойство выбранного метода соединения inner join, но об этом в следующей статье)!
Источник: SQL, сортировка, фильтры, псевдонимы, CyberFleet, уроки, обучение |