Вывести значения столбца при условии

Вывод в запросе столбца по условию

Доброго всем. Подскажите пожалуйста как реализовать следующую задачу.
Есть таблица с товарами, и есть таблица сгруппированных товаров. Т.е. вторая таблица — это как бы расширение первой, поэтому информация по конкретным товарам из группы хранится только в ней, а в первой таблицы, есть только имя группы и id по этим товарам. А соответственно по не сгруппированным товарам первая таблица содержит всю информацию.

Так вот мне надо сделать запрос, который бы выбирал поля из первой таблицы, и там где надо добавлял поля из группы.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Объединение нескольких таблиц, вывод суммы продаж по условию в 2 столбца
Добрый день! Необходимо вывести отчет по продажам, который содержит: |ФИО покупателя | общая.

Объединение полей в запросе по условию
Пытаюсь объединить поля в запросе, подставив текст. NewAdress: (IIf(IsNull(!);»»;!) &.

Нумерация в запросе и выборка записей по условию нумерации
Здравствуйте! Не могу решить проблему. Есть запрос в котором записи выбираются по некоторому.

Подсчитать количество записей по условию в запросе с union
Подскажите пожалуйста, есть такой запрос, все работает правильно. select 1 sec, customer.main.

Читайте также:  Как стирать платье кожзама

Если приведете структуру таблиц, ответ будет точнее.

Пробовал прикрутить LEFT JOIN но у меня в запросе много других условий, поэтому выдает ошибку.
Ниже структура таблицы и запрос.

табл. категорий (id, name),
табл.товара (id, id_cat, name, img, price, description),
табл. групп (id, parent_id, gr_name, img, description)

Источник

Поиск позиции ТЕКСТа в EXCEL с выводом значения из соседнего столбца

history 14 апреля 2013 г.

Для нахождения позиции значения в столбце, с последующим выводом соответствующего значения из соседнего столбца в EXCEL, существует специальная функция ВПР() , но для ее решения можно использовать также и другие функции. Рассмотрим задачу в случае текстовых значений.

Пусть в диапазоне А4:В15 имеется таблица с перечнем сотрудников и их зарплат (фамилии сотрудников не повторяются).

Задача

Требуется, введя в ячейку D4 фамилию сотрудника, вывести в другой ячейке его зарплату. Решение приведено в файле примера .

Решение

Алгоритм решения задачи следующий:

  • находим в списке кодов значение, совпадающее с критерием;
  • определяем номер позиции (строку) найденного значения;
  • выводим значение из соседнего столбца той же строки.

Решение практически аналогично поиску числового значения из статьи Поиск позиции ЧИСЛА с выводом соответствующего значения из соседнего столбца . Для этого типа задач в EXCEL существует специальная функция ВПР() , но для ее решения можно использовать и другие функции (про функцию ВПР() см. эту статью ).

Решение

Если несколько значений удовл. критерию

берется первое сверху

берется первое сверху

берется первое сверху

= ДВССЫЛ(АДРЕС(НАИБОЛЬШИЙ( ЕСЛИ(($A$4:$A$15=$D$4); СТРОКА($A$4:$A$15));1);2))

берется последнее сверху

если столбец отсортирован по возрастанию, то берется последнее сверху, если нет, то результат непредсказуем

соответствующие значения суммируются

соответствующие значения суммируются

Для функции ВПР() требуется, чтобы столбец, по которому производится поиск, был левее столбца, который используется для вывода. Обойти это ограничение позволяет, например, вариант с использованием функций ИНДЕКС() и ПОИСКПОЗ() . Эквивалентная формула приведена в статье о функции ВПР() .

Задача подразумевает, что диапазон поиска содержит неповторяющиеся значения. В самом деле, если критерию удовлетворяет сразу несколько значений, то из какой строки выводить соответствующее ему значение из соседнего столбца? Если все же диапазон поиска содержит повторяющиеся значения, то второй столбец из таблицы выше поясняет какое значение будет выведено (обычно возвращается первое значение, удовлетворяющее критерию).

Если диапазон поиска содержит повторяющиеся значения и требуется вернуть не одно, а все значения, удовлетворяющие критерию, то читайте статью Запрос на основе Элементов управления формы .

Совет : Если в диапазон поиска постоянно вводятся новые значения, то для исключения ввода дубликатов следует наложить определенные ограничения (см. статью Ввод неповторяющихся значений ). Для визуальной проверки наличия дубликатов можно использовать Условное форматирование (см. статью Выделение повторяющихся значений ).

Для организации динамической сортировки пополняемого диапазона поиска можно использовать идеи из статьи Сортированный список .

Источник

SQL SELECT и запросы на выборку данных

Оглавление

  • SELECT для выбора столбцов таблицы
  • SELECT и WHERE для выбора строк таблицы
  • Использование SELECT и предикатов IN, OR, BETWEEN, LIKE
  • SELECT и ORDER BY — сортировка (упорядочение) строк
  • SELECT и DISTINCT — удаление дубликатов строк
  • Оператор SELECT в подзапросах SQL
  • Группировка вместе с сортировкой в запросе: что ставится раньше — GROUP BY или ORDER BY?

Связанные темы

  • Реляционная модель данных
  • SELECT в подзапросах
Назад >>

Оператор языка SQL SELECT — основная строительная конструкция для создания любого, простого или сложного запроса к базе данных. Без него, как и без фундамента для постройки, невозможно получить ни одну выборку данных из базы. На этом уроке мы узнаем, как построить запрос для получения

  • простой выборки данных без условий (выбор всех строк во всех столбцах или всех строк в определённых столбцах);
  • выборки данных с одним или несколькими условиями (выбор определённых строк), которые заданы в секции WHERE с помощью предикатов и дополительный операторов;
  • как использовать оператор SELECT в подзапросах .

SELECT для выбора столбцов таблицы

Запрос с оператором SELECT для выбора всех столбцов таблицы имеет следующий синтаксис:

То есть для выбора всех столбцов таблицы после слова SELECT нужно ставить звёздочку.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .

Работать будем с базой данных фирмы — Company1. Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными — в файле по этой ссылке .

Пример 1. Итак, есть база данных фирмы — Company1. В ней есть таблица Org (Структура фирмы) и Staff (Сотрудники). Требуется выбрать из таблиц все столбцы. Соответствующий запрос для выбора всех столбцов из таблицы Org выглядит следующим образом (на MS SQL Server — с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующее (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):

Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом (на MS SQL Server — с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующее:

Для выбора определённых столбцов таблицы нам потребуется вместо звёздочки перечислить через запятую названия всех столбцов, которые требуется выбрать:

Пример 2. Пусть требуется из таблицы Org выбрать столбцы Depnumb и Deptname, в которых содержатся данные соответственно о номерах отделов фирмы и об их названиях. Запрос для получения такой выборки будет следующим (на MS SQL Server — с предваряющей конструкцией USE company1;):

А из таблицы Staff нужно выбрать столбцы Dept, Name, Job, в которых содержатся соответственно данные о номере отдела, в котором трудится сотрудник, его имени и должности (на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT и WHERE для выбора строк таблицы

Для выбора определённых строк таблицы вместе с оператором SELECT уже потребуется ключевое слово WHERE, указывающее на некоторое значение или несколько значений, содержащиеся в интересующих нас строках. Наиболее простые условия задаются при помощи операторов сравнения и равенства ( , =), а также ключевого слова IS. Условий может быть несколько, тогда они перечисляются с использованием ключевого слова AND. Запросы для выбора строк имеют следующий синтаксис:

Пример 3. Выберем из таблицы Staff строки, в которых содержатся данные только о сотрудниках, которые работают в 38-м отделе (на MS SQL Server — с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующие данные:

Пример 4. В предыдущем примере мы выбирали строки из таблицы только по значению одного столбца — DEPT. Пусть теперь нужно выбрать данные о сотрудниках, которые работают в 38-м отделе и должность которых — служащий (Clerk). Для этого в секции WHERE соответствующие значения нужно перечислить с использованием слова AND (на MS SQL Server — с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующие данные:

Пример 5. Пусть нужно выбрать из таблицы Staff идентификаторы и имена тех сотрудников, размер комиссии которых — неопределённый. Для этого в секции WHERE перед указанием значения столбца Comm — NULL нужно ставить не знак равенства, а слово IS (на MS SQL Server — с предваряющей конструкцией USE company1;):

Этот запрос вернёт следующие данные:

Для указания значений в строках, которые требуется выбрать, используются и знаки сравнения.

Пример 6. Выберем из таблицы имена, размеры заработные платы и число лет, проработанных в фирме, сотрудников, которые работают в фирме более девяти лет (на MS SQL Server — с предваряющей конструкцией USE company1;):

Запрос вернёт следующие строки:

Использование SELECT и предикатов IN, OR, BETWEEN, LIKE

Предикаты — слова IN, OR, BETWEEN, LIKE в секции WHERE — также позволяют выбрать определённые диапазоны значений (IN, OR, BETWEEN) или значения в строках (LIKE), которые требуется выбрать из таблицы. Запросы с предикатами IN, OR, BETWEEN имеют следующий синтаксис:

Запросы с предикатом LIKE имеют следующий синтаксис:

Пример 7. Пусть требуется выбрать из таблицы Staff имена, должности и число отработанных лет сотрудников, работающих в отделах с номерами 20 или 84. Это можно сделать следующим запросом (на MS SQL Server — с предваряющей конструкцией USE company1;):

Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката IN.

Пример 8. Пусть теперь требуется выбрать из таблицы Staff те же данные, что и в предыдущем примере. Запрос со словом OR аналогичен запросу со словом IN и перечислением интересующих значений в скобках. Запрос будет следующим (на MS SQL Server — с предваряющей конструкцией USE company1;):

Пример 9. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, зарплата которых между 15000 и 17000 включительно (на MS SQL Server — с предваряющей конструкцией USE company1;):

Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката BETWEEN.

Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные после предиката между апострофами (‘).

Пример 10. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и состоят из 7 символов (на MS SQL Server — с предваряющей конструкцией USE company1;):

Символ подчёркивания (_) означает любой символ. Результат выполнения запроса:

Пример 11. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и содержат любые другие буквы в любом количестве (на MS SQL Server — с предваряющей конструкцией USE company1;):

Символ процентов (%) означает любое количество символов. Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката LIKE.

Значения, указанные с использованием предикатов IN, OR, BETWEEN, LIKE можно инвертировать при помощи слова NOT. Тогда запрашиваемые данные будут иметь противоположный смысл. Если мы используем NOT IN (20, 84), то будут выведены данные сотрудников, которые работают во всех отделах, кроме имеющих номера 20 и 84. С использованием NOT BETWEEN 15000 AND 17000 можно получить данные сотрудников, зарплата которых не входит в интервал от 15000 до 17000. Запрос с NOT LIKE выведет данные сотрудников, чьи имена не начинаются или не содержат символов, указанных с NOT LIKE.

Написать SQL запросы с SELECT и предикатами IN, NOT IN, BETWEEN самостоятельно, а затем посмотреть решения

Есть база данных «Театр». Таблица Play содержит данные о постановках. Таблица Team — о ролях актёров. Таблица Actor — об актёрах. Таблица Director — о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).

Пример 12. Вывести список актёров, которые не разу не были утверждены на главную роль. В таблице team данные о главных ролях содержатся в столбце mainteam. Если роль — главная, то в соответствующей строке отмечено ‘Y’.

Пример 13. Вывести список актеров, которые играли во всех спектаклях WilliamShakespeare. Данные об авторах содержается в таблице play в столбце author.

Пример 14. Вывести спектакли, в которых средний возраст актеров от 20 до 30 (использовать BETWEEN, Group by, Having, AVG, перекрестное соединение таблиц (CROSS JOIN), удобнее без слова JOIN, а с перечислением таблиц через запятую).

SELECT и ORDER BY — сортировка (упорядочение) строк

Разобранные до сих пор запросы SQL SELECT возвращали строки, которые могли быть расположены в любой последовательности. Однако часто требуется отсортировать строки по порядку номеров, алфавиту и другим признакам. Для этого служит ключевое словосочетание ORDER BY. Такие запросы имеют следующий синтаксис:

Пример 15. Вновь база данных Company1. Пусть требуетя выбрать из таблицы Staff сотрудников, работающих в отделе с номером 84 и отсортировать (упорядочить) записи по числу отработанных лет в возрастающем порядке (на MS SQL Server — с предваряющей конструкцией USE company1;):

Слово ASC указывает, что порядок сортировки — возрастающий. Это слово не обязательно, так как возрастающий порядок сортировки применяется по умолчанию. Результат выполнения запроса:

Пример 16. Пусть требуетя выбрать те же данные, что и в предыдущем примере, но отсортировать (упорядочить) записи по числу отработанных лет в убывающем порядке (на MS SQL Server — с предваряющей конструкцией USE company1;):

Слово DESC указывает, что порядок сортировки — убывающий. Результат выполнения запроса:

SELECT и DISTINCT — удаление дубликатов строк

Когда для значений строк таблицы не задано условие уникальности, в результатах запроса могут встретиться одинаковые строки. Часто требуется вывести лишь уникальные строки. Это делается при помощи выражения DISTINCT после оператора SELECT.

Пример 17. Пусть требуетcя узнать, какие существуют отделы и какие должности среди отделов, номера которых меньше 30. Это можно сделать при помощи следующего запроса (на MS SQL Server — с предваряющей конструкцией USE company1;):

Результат выполнения запроса:

Оператор SELECT в подзапросах SQL

До сих пор мы разбирали конструкции SQL с оператором SELECT, в которых условия, по котором выбираются данные, и сами выбираемые данные содержатся в одной и той же таблице базы данных. На практике часто бывает, что данные, которые надо выбрать, содержатся в одной таблице, а условия — в другой. Здесь на помощь приходят подзапросы: значения условия отбора возвращаются из другого запроса (вложенного запроса), начинающегося также с SELECT. Запросы с подзапросами могут выдавать как одну, так и несколько строк.

Пример 18. Все те же таблицы Org и Staff. Пусть требуетcя узнать, в каком подразделении работает сотрудник с идентификационным номером 16, и где это подразделение расположено. Но информация о подразделениях хранится в таблице Org, а информация о сотрудниках — в таблице Staff. Это можно сделать при помощи следующего запроса с подзапросом, в котором внешний SELECT обращается к таблице Org, а внутренний SELECT — к таблице Staff:

Пример 19. Пусть теперь требуетcя узнать, в каких подразделениях (без дублирования) работают сотрудники с заработной платой менее 13000. Для этого в секции WHERE внешнего SELECT (запрос к таблице Org) задаётся условие, принимающее диапазон значений (IN), а внутренний SELECT (к таблице Staff) как раз возвращает требуемый диапазон значений:

Источник

Оцените статью