Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];

Вниз

Как правильно написать SQL   Найти похожие ветки 

 
Yurij-7   (2008-02-29 14:14) [0]

Уважаемые мастера, прошу помощи.
Есть табличка:

Город                      Продукт        Состояние
*******                 *********
Город2                    Яблоки          Продано
Город2                    Персик          Везут
Город3                    Персик          Везут
Город4                    Банан            На складе

Хочу получить табличку вида:

Город           Продано        Везут      На складе
****************************************
Город2              1                 1
Город3                                 1
Город4                                              1

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

Спасибо.


 
Palladin ©   (2008-02-29 14:17) [1]

помнится в юконе появилась новая инструкция pivot, так что если у тебя юкон, он же mssql 2005, то все получится... а может подобная инструкция есть в каких нибудь других СУБД...


 
Yurij-7   (2008-02-29 14:41) [2]

Жаль что не mssql 2005, а My SQL

Просто ен хочется отчет в 3 таблички выносить а хочу в одной и красиво.


 
Palladin ©   (2008-02-29 14:44) [3]

я тоже много чего хочу... твоя хотелка осуществима, но придется написать побольше чем просто один запрос...


 
Yurij-7   (2008-02-29 14:47) [4]

да я понимаю, можно по сути 2 запроса сделать, но как потом в один набор данных  все слить ((  вот не могу я этого понять


 
Yurij-7   (2008-02-29 14:47) [5]

Удалено модератором
Примечание: дубль


 
korneley ©   (2008-02-29 14:49) [6]


>  но как потом в один набор данных  все слить

Вычисляемые поля?


 
Palladin ©   (2008-02-29 14:50) [7]

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


 
palva ©   (2008-02-29 14:52) [8]

Firebird 1.5
SELECT Город, SUM(CASE Состояние WHEN "Продано" THEN 1 ELSE 0 END),
                    SUM(CASE Состояние WHEN "Везут" THEN 1 ELSE 0 END),
FROM табличка GROUP BY Город


 
Johnmen ©   (2008-02-29 14:53) [9]

Значения и количество "Состояний" неизменно и известно?


 
Сергей М. ©   (2008-02-29 14:54) [10]

Обычный группирующий запрос тут просматривается, ничего из ряда вон выходящего.

А вот выполненять его следует, например, компонентом TDecisionQuery, или аналогичным по назначению кросстаб-компонентом, ориентированном на другую СУБД


 
Palladin ©   (2008-02-29 14:54) [11]


> palva ©   (29.02.08 14:52) [8]

мне кажется 1 это не флаг, а количество таких состояний

любая БД :)
select город, состояние, count(продукт) from табличка group by город, состояние


 
Yurij-7   (2008-02-29 15:01) [12]

Спасибо за внимание к моему вопросу
Запрос не вычисляемый, база FB, по сути мне надо по каждому городу вывести в разрезе состояний количество продуктов


 
Yurij-7   (2008-02-29 15:24) [13]

То: Johnmen ©   (29.02.08 14:53) [9]

Да, всего есть 5 состояний
надо просто посчитать любые товары с этими состояниями


 
Yurij-7   (2008-02-29 15:26) [14]

То: Palladin ©   (29.02.08 14:54) [11]

Это я привел пример результирующей выборки, иными словами мне надо такой результат, а 1 это количество продуктов в таком состоянии


 
palva ©   (2008-02-29 15:31) [15]

Если в таблице имеется уникальное значение ID, то можно так:

SELECT A.GOROD, COUNT(B.SOST), COUNT(C.SOST), COUNT(D.SOST)
FROM TABLE1 A
LEFT JOIN TABLE1 B ON B.ID = A.ID AND B.SOST = "Продано"
LEFT JOIN TABLE1 C ON C.ID = A.ID AND C.SOST = "Везут"
LEFT JOIN TABLE1 D ON D.ID = A.ID AND D.SOST = "На складе"
GROUP BY A.GOROD


 
Johnmen ©   (2008-02-29 15:42) [16]


> palva ©   (29.02.08 15:31) [15]

Не-а :)) Грубо ошибаешься...


 
Johnmen ©   (2008-02-29 15:44) [17]


> Yurij-7   (29.02.08 15:24) [13]
> То: Johnmen ©   (29.02.08 14:53) [9]
> Да, всего есть 5 состояний

Ещё один вопрос - какая версия MySQL?


 
Yurij-7   (2008-02-29 15:45) [18]

тоесть в данном примере я вижу что справочник выведен в отдельную таблиу ?


 
Yurij-7   (2008-02-29 15:48) [19]

То:Johnmen ©   (29.02.08 15:44) [17]

MySQL - 3.23.37


 
Johnmen ©   (2008-02-29 15:55) [20]


> Yurij-7   (29.02.08 15:48) [19]

Тогда вид в [0] получить невозможно никаким, сколь угодно сложным, запросом.


 
Johnmen ©   (2008-02-29 15:59) [21]

...хотя вру :)
Сделав ограничивающее допущение [9], схема запроса примерно такая:
SELECT
 Город,
 SUM(IF("Продано",1,0)),
 SUM(IF("Везут",1,0)),
 ...
FROM Table
GROUP BY Город


 
Yurij-7   (2008-02-29 16:00) [22]

То: Johnmen ©   (29.02.08 15:55) [20]
Но я же видел подобную реализацию на MS SQL , что же делать?
надо через промежуточную таблицу делать?

подскажите пож как можно реализовать данный отчет


 
palva ©   (2008-02-29 16:05) [23]

> Тогда вид в [0] получить невозможно никаким, сколь угодно сложным, запросом.
[15] должно работать, поскольку все по стандарту.
Кроме того, в MySQL есть функция IF. [8] можно переписать так: вместо
SUM(CASE Состояние WHEN "Продано" THEN 1 ELSE 0 END)
написать
SUM(IF(Состояние = "Продано", 1, 0)


 
Сергей М. ©   (2008-02-29 16:07) [24]

А чем собссно решение [10] смущает/не устраивает ?

Оно же очевидно - если есть готовые компоненты для кросстаб-запросов, почему бы ими не воспользоваться ?


 
Johnmen ©   (2008-02-29 16:09) [25]


> palva ©   (29.02.08 16:05) [23]
> [15] должно работать, поскольку все по стандарту.

Работать будет. Результат работы будет кривой :)


 
Palladin ©   (2008-02-29 16:11) [26]


> Сергей М. ©   (29.02.08 16:07) [24]

ну видимо никто просто не умеет Decision Cube готовить :)


 
Сергей М. ©   (2008-02-29 16:15) [27]


> Palladin ©   (29.02.08 16:11) [26]


Научиться-то пара пустяков)
Тут другое тормозит - БДЕ для него вынь да положь)
Но в кач-ве подручного учебного материала оч даже подойдет.


 
palva ©   (2008-02-29 16:17) [28]


> Работать будет. Результат работы будет кривой :)

А разве нужно не кривой? Автору важно чтобы работал правильно. У меня в запросе где-то ошибка?


 
palva ©   (2008-02-29 16:21) [29]


> Johnmen ©   (29.02.08 15:59) [21]
> SELECT
>  Город,
>  SUM(IF("Продано",1,0)),

SUM(IF(Состояние = "Продано",1,0)),


 
ANB   (2008-02-29 16:22) [30]

селект Город_Имя,
 (селект каунт(*) фром Товары Т вере Т.Город = Г.Город энд Т.Состояние = "Везут") "Везут",
 (селект каунт(*) фром Товары Т вере Т.Город = Г.Город энд Т.Состояние = "На складе") "На складе",
 (селект каунт(*) фром Товары Т вере Т.Город = Г.Город энд Т.Состояние = "Воруют") "Воруют"
фром Города Г


 
ANB   (2008-02-29 16:24) [31]


> ну видимо никто просто не умеет Decision Cube готовить :
> )

Он тут ни на фиг не нужен.


 
Palladin ©   (2008-02-29 16:27) [32]

я такие решения называю: через "там где не светит солнце"
тройная выборка (четверная, пятерная,... икстерная? ) не считая главной


 
Johnmen ©   (2008-02-29 16:31) [33]


> palva ©   (29.02.08 16:17) [28]
> А разве нужно не кривой? Автору важно чтобы работал правильно. У
> меня в запросе где-то ошибка?

Обычно да, ожидается прямой. Т.е. ожидаемый. Он же правильный :)
У тебя в запросе сущностная ошибка, не синтаксическая.


> palva ©   (29.02.08 16:21) [29]

Я же сказал явно - "схема".


 
Johnmen ©   (2008-02-29 16:32) [34]


> ANB   (29.02.08 16:22) [30]

Как ты думаешь, я просто так спрашивал [17]?


 
Yurij-7   (2008-02-29 16:38) [35]

То:Сергей М. ©   (29.02.08 16:07) [24]

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


 
Palladin ©   (2008-02-29 16:39) [36]


> Yurij-7   (29.02.08 16:38) [35]

то есть таблицу сам рисуешь?


 
palva ©   (2008-02-29 16:44) [37]

> У тебя в запросе сущностная ошибка, не синтаксическая.

Сущностная? Чего-то не понимаю я в этой жизни.


 
Palladin ©   (2008-02-29 16:46) [38]


> palva ©   (29.02.08 16:44) [37]

того что нужно не 1,0, а количество товара сгруппированных по городу и состоянию о чем я тебе и сказал в Palladin ©   (29.02.08 14:54) [11]


 
Yurij-7   (2008-02-29 16:48) [39]

То: Palladin ©   (29.02.08 16:39) [36]

Ну как, делаю запрос, получаю НД, а потом его в вэб страничку переношу


 
Palladin ©   (2008-02-29 16:48) [40]

о, туплю и невнимателен, просшу просчения... у тебя же там функции стоят...



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

Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.046 c
2-1204373153
GHT
2008-03-01 15:05
2008.03.30
высота строк и перенос слов в DBGrid


3-1194512166
zorik
2007-11-08 11:56
2008.03.30
Корректное отключение (подключение) TIBDatabase


15-1202819297
ketmar
2008-02-12 15:28
2008.03.30
система контроля версий git — интересуют плохие отзывы


2-1203488436
vegarulez
2008-02-20 09:20
2008.03.30
Вопрос про alignment у TEdit.


15-1203276259
DillerXX
2008-02-17 22:24
2008.03.30
1394





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский