Форум: "Начинающим";
Текущий архив: 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.043 c