С Новым годом! Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/75: Рейтинг темы: голосов - 75, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50

Missing expression

28.04.2016, 12:05. Показов 14994. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Задание таково:
Напишите запрос, который выводит на экран общее количество работников, а также количество работников принятых на работу в 1995, 1996, 1997 и 1998. Назовите эти поля TOTAL, 1995, 1996, 1997 и 1998 соответственно.

Вот что набросал:
SQL
1
2
3
4
SELECT 
ANG.COUNT(*) AS TOTAL, ANG1.COUNT(*) AS 1995, ANG2.COUNT(*) AS 1996, ANG3.COUNT(*) AS 1997, ANG4.COUNT(*) AS 1998 
FROM ANGAJATI ANG, ANGAJATI ANG1, ANGAJATI ANG2, ANGAJATI ANG3, ANGAJATI ANG4 
WHERE ANG1.DATA_ANG='%/%/1995' AND ANG2.DATA_ANG='%/%/1996' AND ANG3.DATA_ANG='%/%/1997' AND ANG4.DATA_ANG='%/%/1998'
Вот ошибка: ORA-00936: missing expression

Помогите найти ошибку пожалуйста и правильно ли я вообще пишу ответ к данной задаче
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2016, 12:05
Ответы с готовыми решениями:

Missing right parenthesis
Добрый день! Показывает ошибку 00907. 00000 - "missing right parenthesis" *Cause: *Action: CREATE TABLE Duration( ...

ORA-00922: missing or invalid option
что означает? как исправить? Добавлено через 1 минуту LTER TABLE Анализ_ДЗ_КЗ:_ПРИТОК ADD PRIMARY KEY (№_зад_ти_ПРИТОК) ...

Ошибка "Missing expression"
Помогите что же за ошибка то такая! в 5-ой строке! SELECT maintablica.fio,medsljba.OKLAD as okldlj, ROUND(OVZ.OCLAD,2) as oklvzv,;...

16
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2016, 13:05
Цитата Сообщение от bobtb Посмотреть сообщение
Помогите найти ошибку
1. извлечь год из даты
a)
SQL
1
EXTRACT(YEAR FROM fld_date)
б)
SQL
1
to_char(fld_date, 'yyyy')
2. ANG1.COUNT(*) - такой конструкции не существует, только ANG1.fld10

3. если ты во FROM указываешь несколько таблиц, то должно быть минимум одно условие связи на каждую таблицу. Иначе получишь декартово произведение строк таблиц.
В данном случае я бы выборки по годам объединил по UNION
0
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50
28.04.2016, 14:51  [ТС]
Grossmeister, никогда до этого не использовал extract и union, нельзя по-проще вариант какой-то? может можно от 01/01/yyyy?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2016, 15:12
Цитата Сообщение от bobtb Посмотреть сообщение
может можно от 01/01/yyyy
Это к чему?
0
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50
28.04.2016, 15:36  [ТС]
Grossmeister, ну чтобы не извлекать,а сразу дату использовать
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2016, 16:19
Цитата Сообщение от bobtb Посмотреть сообщение
Задание таково:
По-моему, запрос написан принципиально ошибочно. Часть ошибок уже были указаны (отсутствие связей, неверные идентификаторы). Но у меня есть существенные вопросы. А люди увольняются или как? Как можно найти общее количество работающих, если известны принятые, но неизвестны уволенные?
И еще. Что такое количество работающих в году? На какую именно дату? В течение года люди ведь тоже могли увольняться и поступать на работу. Наконец, некоторые люди увольняются, а затем поступают вновь. Надо отличать случаи повторного приема или нет, и если надо, то как именно?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2016, 16:19
Цитата Сообщение от bobtb Посмотреть сообщение
сразу дату использовать
Твоя задача - выбрать все даты, принадлежащие определенному году. Соответственно, саму дату использовать нельзя, поскольку они разные за этот год. Следовательно, без превращения даты в строку/число, содержащую год, не обойтись. Можно конечно преобразовать дату в строку и использовать LIKE, но это уже лечение гланд через ж...
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2016, 16:29
Цитата Сообщение от Grossmeister Посмотреть сообщение
Следовательно, без превращения даты в строку/число, содержащую год не обойтись
Да нет же, достаточно сделать trunc(var_date,'yy')

Добавлено через 8 минут
Блин, а DATA_ANG - это дата или строка? Если дата, то почему так криво запрос написан? Одно выражение ANG2.DATA_ANG='%/%/1996' должно ошибку синтаксиса вызывать
0
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50
28.04.2016, 16:42  [ТС]
AGK, это дата,я знаю,я примерно написал,т.к. не знал
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2016, 16:45
Цитата Сообщение от bobtb Посмотреть сообщение
я примерно написал,т.к. не знал
Остались еще неотвеченные вопросы:
1) А люди увольняются или как?
2) На какую именно дату надо указать число работающих?
3) (!!!) С какого года (месяца, даты) ведется учет?
Как только ответите, получите ответ
0
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50
28.04.2016, 16:50  [ТС]
AGK, не увольняются,таблицы вообще не изменяются
нужен год 1995-1998
с 2000 года

Это не реальная БД,а просто пример
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2016, 16:59
Цитата Сообщение от bobtb Посмотреть сообщение
нужен год 1995-1998
с 2000 года
Каким образом могут быть люди приняты в 1995 году, если учет ведется с 2000 года?
Значит число людей, принятых во все указанные годы равно 0?

!!!! 2) На какую именно дату надо указать число работающих?

Добавлено через 2 минуты
Цитата Сообщение от bobtb Посмотреть сообщение
не увольняются,таблицы вообще не изменяются
Ну это полный бред. Кто-то мог же умереть за это время. Его тоже надо указывать в числе работающих?
0
0 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 50
28.04.2016, 16:59  [ТС]
AGK, мне не нужно получать какие-то данные,мне самое главное - правильно ввести запрос.

TOTAL - абсолютно все даты.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2016, 17:01
Цитата Сообщение от AGK Посмотреть сообщение
Да нет же, достаточно сделать trunc(var_date,'yy')
Да, только тогда надо будет сравнивать не с 2016, а с to_date('01.01.2016', 'dd.mm.yyyy')
Сомневаюсь, что это проще предложенного мной.
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2016, 17:12
Лучший ответ Сообщение было отмечено bobtb как решение

Решение

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

Добавлено через 4 минуты
Цитата Сообщение от Grossmeister Посмотреть сообщение
Сомневаюсь, что это проще
Ну в итоге я сделал почти как Вы хотели:
SQL
1
2
3
4
5
6
SELECT COUNT(*) TOTAL,
       SUM(CASE WHEN to_char(DATA_ANG, 'yyyy')='1995' THEN 1 ELSE 0 END)  "1995",
       SUM(CASE WHEN to_char(DATA_ANG, 'yyyy')='1996' THEN 1 ELSE 0 END)  "1996",
       SUM(CASE WHEN to_char(DATA_ANG, 'yyyy')='1997' THEN 1 ELSE 0 END)  "1997",
       SUM(CASE WHEN to_char(DATA_ANG, 'yyyy')='1998' THEN 1 ELSE 0 END)  "1998"
FROM ANGAJATI;
Нельзя числа использовать в качестве алиасов. Надо их в кавычки брать. Я думаю, что Ваша ошибка, в основном, из-за этого была

Добавлено через 1 минуту
Результат бредовый, но я не виноват. Постановка подкачала.

Добавлено через 3 минуты
На нашей базе получилось так
XML
1
2
3
TOTAL   1995    1996    1997    1998
-----   ----    ----    ----    ----
1668    9       34      79      131
1
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2016, 19:33
Цитата Сообщение от AGK
Нельзя числа использовать в качестве алиасов. Надо их в кавычки брать. Я думаю, что Ваша ошибка,
Ну, это как минимум, не моя ошибка
То, что Oracle предпочитает идентификаторы, начинающиеся с буквы, я в курсе.
Но то, что причиной первоначальной ошибки явилось это ANG.COUNT(*), я уверен 100%
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
29.04.2016, 09:10
Grossmeister, я, вообще-то обращался к ТС. Извините, если неудачно выразился. Согласен с Вами по поводу ANG.COUNT(*)
Провел маленький эксперимент, благо селект сохранился. Отсутствие кавычек приводит к ошибке ORA-00923: FROM keyword not found where expected
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2016, 09:10
Помогаю со студенческими работами здесь

Client Library is missing
Добрый день! Помогите пожалуйста. Несколько дней не запускал свою базу данных. Сегодня попробовал запустить и выдает следующее...

This expression is typed incorrectly, or it is too complex to be evaluated
Я хочу вашей помощи, у меня проблема такая " this expression is typed incorrectly,or it is too complex to be evaluated.for example ,a...

НУЖНО пронумеровать в поле Expression записи КАК?
НУЖНО пронумеровать в поле Expression записи КАК? то есть не просто узнать кол-во но пронумеровать их в отдельном поле запроса

Tools -> References -> MISSING Utility.mda
Хотелось бы разобраться. Сабж возникает время от времени на сервере терминалов на клиентах аксеса который идет с офисом XP. 2002 Access...

MASM 64 missing operator in expression
Написал shell-код для похищения потока и загрузки библиотеки в 64 разрядный процесс,пишу в VS2015 Community на MASMx64. Получаю следующие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru