Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.05;
Скачать: CL | DM;

Вниз

SQL-запрос. Подскажите пожалуйста.   Найти похожие ветки 

 
Чипырик ©   (2009-05-16 16:43) [0]

Доброго времени суток!
У меня возникла проблема при составлении 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-16 16:45) [1]

т.е. ругается на GROUP BY


 
makz   (2009-05-16 18:43) [2]

"class" и "status" - неудачный выбор имен для полей.


 
turbouser ©   (2009-05-16 19:10) [3]


> Чипырик ©   (16.05.09 16:45) [1]
>
> т.е. ругается на GROUP BY

Как ругается? Неужели таким матом, что правила форума не позволяют привести здесь текст сего ругательства?


 
Чипырик ©   (2009-05-16 19:37) [4]

Ругается не матом, но по английки...
Вот что пишет.

Invalid use of keyword
Token: COUNT(Status)
Line Number: 1


 
turbouser ©   (2009-05-16 19:51) [5]


> Чипырик ©   (16.05.09 19:37) [4]

SELECT Class, Status, COUNT(*) FROM Таблица1


 
Игорь Шевченко ©   (2009-05-16 19:55) [6]


> Ругается не матом, но по английки...


непорядок


 
Совесть ДМ ©   (2009-05-16 20:06) [7]

сначала удовлетворить [2] потом будем посмотреть


 
AndreyV ©   (2009-05-16 21:56) [8]

Двойные кавычки


 
Чипырик ©   (2009-05-17 00:02) [9]

2 Совесть ДМ
т.е. кидать на форму 2 SQL компонента?
а в 1-ом это сделать нельзя?

2 AndreyV
с двойными кавычками пишет
Invalid use of keyword
Token: COUNT("Status")
Line Number: 1


 
Чипырик ©   (2009-05-17 00:04) [10]

2 turbouser
если сделать SELECT Class, Status, COUNT(*) FROM Таблица1, тогда выскакивает ошибка:
Invalid use of keyword
Token: COUNT(*)
Line Number: 1


 
AndreyV ©   (2009-05-17 00:10) [11]

> [9] Чипырик ©   (17.05.09 00:02)
> с двойными кавычками пишет
...

Там попя переименуй, как и сказали уже или [].

Так попробуй
WHERE Strana = `Страна2`

И ещё. Ты уверен, что dBase, FoxPro, а то Таблица1.db?


 
Чипырик ©   (2009-05-17 09:20) [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


 
turbouser ©   (2009-05-17 09:44) [13]


> Чипырик ©   (17.05.09 09:20) [12]

SELECT "Class", "Status", COUNT(*) FROM priznak_korablya
WHERE "Strana" = "Страна2"
GROUP BY "Class", "Status"


 
turbouser ©   (2009-05-17 09:51) [14]

да и без кавычек должно работать..
все-таки dBase, FoxPro или Paradox? или еще что-то?


 
Чипырик ©   (2009-05-17 09:58) [15]

DBE таблицы создавал в Парадоксе


 
turbouser ©   (2009-05-17 10:39) [16]


> Чипырик ©   (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 Класс, Статус

-без проблем.


 
turbouser ©   (2009-05-17 10:49) [17]

Ну, и результат, соответственно:
Класс1 Статус2 1
Класс3 Статус1 2
Класс4 Статус2 2
Класс5 Статус4 1


 
Чипырик ©   (2009-05-17 10:51) [18]

Спасибо большое.
Запрос заработал....
Только я не понял в чем ошибка-то была?
В том, что я писал COUNT(Status) вместо COUNT(*)?


 
turbouser ©   (2009-05-17 10:55) [19]


> Чипырик ©   (17.05.09 10:51) [18]

Нет, не в этом.


 
Чипырик ©   (2009-05-17 11:24) [20]

а в чем же?
вот мой первый не рабочий код
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 11:26) [21]


> WHERE Strana = "Страна2"


 
Чипырик ©   (2009-05-17 11:33) [22]

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


 
Чипырик ©   (2009-05-17 11:38) [23]

Только что написал WHERE Strana = "Страна2" вместо WHERE Strana = "Страна2"
Результат положительный. Запрос работает правильно.
Так что дело вовсе не в кавычках



Страницы: 1 вся ветка

Текущий архив: 2009.07.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
2-1242622208
товарищ вася
2009-05-18 08:50
2009.07.05
Подвисание формы


2-1242462330
snake-as
2009-05-16 12:25
2009.07.05
Распечатать файл с форматированием и таблицами


15-1241384653
Германн
2009-05-04 01:04
2009.07.05
Банальный вопрос. Архивация данных.


2-1242287891
KiLLiR
2009-05-14 11:58
2009.07.05
Печать картинки из файла


15-1240818026
12
2009-04-27 11:40
2009.07.05
tsql, sql express. Как ускорить этот запрос.