![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос. Подскажите пожалуйста. [D6, dBase, FoxPro]
Чипырик © (2009-05-16 16:43:00)Доброго времени суток!
У меня возникла проблема при составлении SQL-запроса.
Есть Таблица1.db с полями Название, Страна, Класс, Статус
"Название" - ключевое поле...
Нужно посчитать и вывести в DBGrid отфильтрованные по стране значения с группировкой по классу и по Статусу.
И подсчитать кол-во отфильтрованных классов(неповторяющихся) и статусов (неповторяющихся)
Для примера:
Название Страна Класс Статус
--------------------------------------------
Кор0 Страна1 Класс1 Статус2
Кор1 Страна2 Класс4 Статус2
Кор2 Страна1 Класс4 Статус3
Кор3 Страна3 Класс2 Статус2
Кор4 Страна4 Класс3 Статус2
Кор5 Страна2 Класс3 Статус1
Кор6 Страна2 Класс3 Статус1
Кор7 Страна3 Класс4 Статус2
Кор8 Страна4 Класс5 Статус3
Кор9 Страна2 Класс1 Статус2
Кор10 Страна2 Класс5 Статус4
Кор11 Страна2 Класс4 Статус2
Условие запроса: Вывести все строки отфильтрованные по полю "Страна" = Страна2. Сгруппировать по Классу,Статусу и вывести сумму по статусу...
Отфильтрованные записи
Класс4 Статус2
Класс3 Статус1
Класс3 Статус1
Класс5 Статус4
Класс4 Статус2
Класс1 Статус2
Результат д.б. такой
Класс Статус Сумм
----------------------------
Класс4 Статус2 2
Класс3 Статус1 2
Класс5 Статус4 1
Класс1 Статус2 1
Вот что я пытался написать, но чего-то постоянно ругается на ORDER BY
SELECT Class, Status, COUNT(Status) FROM Таблица1
WHERE Strana = "Страна2"
GROUP BY Class, Status
ORDER BY Class, Status
Язык SQL стал осваивать буквально 3 дня назад. Может быть я где-то операторы попутал?
Подскажите, пожалуйста, чего я делаю не так?
Чипырик (2009-05-17 11:38:00) [1]Только что написал
WHERE Strana = "Страна2"вместоWHERE Strana = 'Страна2'
Результат положительный. Запрос работает правильно.
Так что дело вовсе не в кавычках
Чипырик (2009-05-17 11:33:00) [2]Тоесть кавычки тоже имеют значение?
а в чем разница между " и ' .
Т.е. какие когда применяются?
Я, если честно, думал что они (кавычки) вобще не обязательны для полей с простым названием
turbouser (2009-05-17 11:26:00) [3]
> WHERE Strana = 'Страна2'
Чипырик (2009-05-17 11:24:00) [4]а в чем же?
вот мой первый не рабочий код
SELECT Class, Status, COUNT(Status) FROM Таблица1
WHERE Strana = "Страна2"
GROUP BY Class, Status
ORDER BY Class, Status
а вот рабочий код
SELECT Class, Status, COUNT(*) FROM Таблица1
WHERE Strana = 'Страна2'
GROUP BY Class, Status
ORDER BY Class, Status
Разница только в калькулируемом поле
turbouser (2009-05-17 10:55:00) [5]
> Чипырик © (17.05.09 10:51) [18]
Нет, не в этом.
Чипырик (2009-05-17 10:51:00) [6]Спасибо большое.
Запрос заработал....
Только я не понял в чем ошибка-то была?
В том, что я писал COUNT(Status) вместо COUNT(*)?
turbouser (2009-05-17 10:49:00) [7]Ну, и результат, соответственно:
Класс1 Статус2 1
Класс3 Статус1 2
Класс4 Статус2 2
Класс5 Статус4 1
turbouser (2009-05-17 10:39:00) [8]
> Чипырик © (17.05.09 09:58) [15]
тогда запрос
SELECT Class, Status, COUNT(*) FROM Таблица1
WHERE Strana = 'Страна2'
GROUP BY Class, Status
ORDER BY Class, Status
Должен работать.
Например:
create table Таблица1
(Название varchar(10),
Страна varchar(10),
Класс varchar(10),
Статус varchar(10))
SELECT Класс, Статус, COUNT(*) FROM Таблица1
WHERE Страна = 'Страна2'
GROUP BY Класс, Статус
ORDER BY Класс, Статус
-без проблем.
Чипырик (2009-05-17 09:58:00) [9]DBE таблицы создавал в Парадоксе
turbouser (2009-05-17 09:51:00) [10]да и без кавычек должно работать..
все-таки dBase, FoxPro или Paradox? или еще что-то?
turbouser (2009-05-17 09:44:00) [11]
> Чипырик © (17.05.09 09:20) [12]
SELECT "Class", "Status ", COUNT( *) FROM priznak_korablya
WHERE "Strana "= 'Страна2'
GROUP BY "Class ", "Status "
Чипырик (2009-05-17 09:20:00) [12]Я немножко не пойму... переименовать поля в операторе SELECT типа
SELECT Class AS Класс, Status AS Статусили переименовать название полей в самой базе данных (в таблице)?
Если второе, то не получится....
Попробовал с кавычками следующий код:
SELECT 'Class', 'Status', COUNT('Status') FROM priznak_korablya
WHERE 'Strana' = 'Страна2'
GROUP BY 'Class', 'Status'
Теперь вот такая ошибка выскакивает:
> Capability not supported
AndreyV (2009-05-17 00:10:00) [13]> [9] Чипырик © (17.05.09 00:02)
> с двойными кавычками пишет
...
Там попя переименуй, как и сказали уже или [].
Так попробуй
WHERE Strana = `Страна2`
И ещё. Ты уверен, что dBase, FoxPro, а то Таблица1.db?
Чипырик (2009-05-17 00:04:00) [14]2 turbouser
если сделать SELECT Class, Status, COUNT(*) FROM Таблица1, тогда выскакивает ошибка:
Invalid use of keyword
Token: COUNT(*)
Line Number: 1
Чипырик (2009-05-17 00:02:00) [15]2 Совесть ДМ
т.е. кидать на форму 2 SQL компонента?
а в 1-ом это сделать нельзя?
2 AndreyV
с двойными кавычками пишет
Invalid use of keyword
Token: COUNT("Status")
Line Number: 1
AndreyV (2009-05-16 21:56:00) [16]Двойные кавычки
Совесть ДМ (2009-05-16 20:06:00) [17]сначала удовлетворить [2] потом будем посмотреть
Игорь Шевченко (2009-05-16 19:55:00) [18]
> Ругается не матом, но по английки...
непорядок
turbouser (2009-05-16 19:51:00) [19]
> Чипырик © (16.05.09 19:37) [4]
SELECT Class, Status, COUNT(*) FROM Таблица1
Чипырик (2009-05-16 19:37:00) [20]Ругается не матом, но по английки...
Вот что пишет.
Invalid use of keyword
Token: COUNT(Status)
Line Number: 1