Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) продажи по ценовым категориям по периодам. мучаюсь с запросом (число прочтений - 3928 )
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
продажи по ценовым категориям по периодам. мучаюсь с запросом
29. Декабря 2010 :: 09:35
Печать  
собственно сабж.... дошел до того момента что мой запрос формирует список номенклатуры с ценами по периодам и продажи - сумму и количество...как теперь придумать разбивку по ценовым категориям - не очень хорошо представляю
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #1 - 29. Декабря 2010 :: 10:42
Печать  
Если ценовая категория это просто от одной цифры до какой-то другой, то берете case и получаете категории.
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #2 - 29. Декабря 2010 :: 10:52
Печать  
вот  в этом то и загвоздка - не знаю как и куда этот CASE прикрутить
вот мой запрос:


           |SELECT NullIf(Рег.Период, '17530101') Период
           |      , Номенклатура.ID [Ссылка $Справочник.Номенклатура]
           |      , $Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
           |      , $ПоследнееЗначение.Цены.Цена(Цены.ID, Рег.Период) Цена
           |      , Рег.СуммаКоличествоРасходРасход
           |      , Рег.СуммаСтоимостьРасходРасход
           |FROM $Справочник.Номенклатура AS Номенклатура
           |      LEFT JOIN $Справочник.Цены AS Цены ON Номенклатура.ID = Цены.PARENTEXT AND $Цены.ТипЦен = :ВыбТипЦен
           |      INNER JOIN (SELECT NullIf(ЗаявкиОстаткиОбороты.Период, '17530101') Период
           |                  , ЗаявкиОстаткиОбороты.Номенклатура
           |                  , Sum(ЗаявкиОстаткиОбороты.КоличествоРасходРасход) СуммаКоличествоРасходРасход
           |                  , Sum(ЗаявкиОстаткиОбороты.СтоимостьРасходРасход) СуммаСтоимостьРасходРасход
           |            FROM $РегистрОстаткиОбороты.Заявки(:НачДата,
           |                        :КонДата,
           |                        День,
           |                        Движения,,,
           |                        Номенклатура,) AS ЗаявкиОстаткиОбороты
           |            WHERE (ЗаявкиОстаткиОбороты.КоличествоРасходРасход > 0)
           |            GROUP BY ЗаявкиОстаткиОбороты.Период
           |                  , ЗаявкиОстаткиОбороты.Номенклатура) AS Рег ON Номенклатура.ID = Рег.Номенклатура
           |GROUP BY ALL Рег.Период
           |      , Номенклатура.ID
           |      , $Цены.ТипЦен
           |      , Цены.ID
           |      , Рег.СуммаКоличествоРасходРасход
           |      , Рег.СуммаСтоимостьРасходРасход
           |";
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #3 - 29. Декабря 2010 :: 11:57
Печать  
можешь обернуть в еще один селект и там поделить, в зависимости от чего надо.
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #4 - 29. Декабря 2010 :: 12:55
Печать  
можно хотя бы немного строк для большего понимания?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #5 - 29. Декабря 2010 :: 13:29
Печать  
Тебе категорию нужно в 1 столбце видеть ?
Тогда так :

select
  t.Цена Цена,
  case
       when  t.Цена<0 then 'хз че за категория'
       when  t.Цена>=0 and t.Цена<10  then 'дешовка'
       when  t.Цена>=10 and t.Цена<100  then 'cереднячок'
       when  t.Цена>=100 and t.Цена<1000  then 'элитка'
       else 'космос'
  end as Категория
 ....
 From(
   select
         ....
   ) as t
 
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #6 - 29. Декабря 2010 :: 14:13
Печать  
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Категория'.  Печаль
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #7 - 29. Декабря 2010 :: 14:14
Печать  
           |SELECT
           |      Т.Цена Ценник
           |      , CASE
           |            WHEN Т.Цена >= 0 AND Т.Цена < 1000 THEN 'категория 1'
           |            WHEN Т.Цена >= 1000 AND Т.Цена < 2000 THEN 'категория 2'
           |            WHEN Т.Цена >= 2000 AND Т.Цена < 3000 THEN 'категория 3'
           |            WHEN Т.Цена >= 3000 AND Т.Цена < 4000 THEN 'категория 4'
           |            ELSE 'категория 5'
           |            END AS Категория
           |FROM (
           |
           |SELECT DISTINCT NullIf(Рег.Период, '17530101') Период
           |      , Рег.ГруппаТМЦ [ГруппаТМЦ $Справочник.ЗначенияСвойств]
           |      , Номенклатура.ID [Ссылка $Справочник.Номенклатура]
           |      , $Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
           |      , $ПоследнееЗначение.Цены.Цена(Цены.ID, Рег.Период) Цена
           |      , Рег.СуммаКоличествоРасходРасход
           |      , Рег.СуммаСтоимостьРасходРасход
           |FROM $Справочник.Номенклатура AS Номенклатура
           |      LEFT OUTER JOIN $Справочник.Цены AS Цены ON Номенклатура.ID = Цены.PARENTEXT AND $Цены.ТипЦен = :ВыбТипЦен
           |      RIGHT OUTER JOIN (SELECT ЗаявкиОстаткиОбороты.Период
           |                  , ЗаявкиОстаткиОбороты.Номенклатура
           |                  , $СвойстваНоменклатуры.ЗначениеСвойства ГруппаТМЦ
           |                  , Sum(ЗаявкиОстаткиОбороты.КоличествоРасходРасход) СуммаКоличествоРасходРасход
           |                  , Sum(ЗаявкиОстаткиОбороты.СтоимостьРасходРасход) СуммаСтоимостьРасходРасход
           |            FROM $РегистрОстаткиОбороты.Заявки(:НачДата,
           |                        :КонДата,
           |                        День,
           |                        Движения,,,
           |                        Номенклатура,) AS ЗаявкиОстаткиОбороты
           |                  LEFT OUTER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры ON ЗаявкиОстаткиОбороты.Номенклатура = СвойстваНоменклатуры.PARENTEXT
           |            WHERE (ЗаявкиОстаткиОбороты.КоличествоРасходРасход > 0 )
           |            GROUP BY ЗаявкиОстаткиОбороты.Период
           |                  , ЗаявкиОстаткиОбороты.Номенклатура
           |                  , $СвойстваНоменклатуры.ЗначениеСвойства) AS Рег ON Номенклатура.ID = Рег.Номенклатура
           |GROUP BY ALL Рег.Период
           |      , Рег.ГруппаТМЦ
           |      , Номенклатура.ID
           |      , $Цены.ТипЦен
           |      , Цены.ID
           |      , Рег.СуммаКоличествоРасходРасход
           |      , Рег.СуммаСтоимостьРасходРасход) AS Т
           |GROUP BY
           |            Категория
           |";
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #8 - 29. Декабря 2010 :: 14:16
Печать  
а тебе точно по категории ГРУППИРОВАТЬ надо?

убери            
Код
Выбрать все
|GROUP BY
|		Категория 

  
Наверх
wwwICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #9 - 29. Декабря 2010 :: 14:23
Печать  
Для начала, всю типизацию перенеси в самый внешний селект

А во-вторых,выкини
|GROUP BY
|            Категория
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #10 - 29. Декабря 2010 :: 14:43
Печать  
Eprst писал(а) 29. Декабря 2010 :: 14:23:
Для начала, всю типизацию перенеси в самый внешний селект

А во-вторых,выкини
|GROUP BY
|            Категория

не совсем про типизацию понятно
  
Наверх
 
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #11 - 29. Декабря 2010 :: 14:52
Печать  
п.с. сильно не бейте за много глупых вопросов - первый запрос пишу.....
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #12 - 29. Декабря 2010 :: 14:57
Печать  
...
|FROM (
          |
          |SELECT DISTINCT NullIf(Рег.Период, '17530101') Период
          |      , Рег.ГруппаТМЦ ГруппаТМЦ

...

грубо говоря все что начинается с $ и квадратные скобки
  
Наверх
wwwICQ  
IP записан
 
JBoy
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 52
Зарегистрирован: 29. Декабря 2010
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #13 - 30. Декабря 2010 :: 07:33
Печать  
запрос вроде как заработал, но все же мне надо группировать по категории, чтобы получилось что то типа такого
категория            количество      сумма
категория1               n1                  s1 
категория2               n2                  s2 
категория3               n3                  s3 
категория4               n4                  s4
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: продажи по ценовым категориям по периодам. мучаюсь с запросом
Ответ #14 - 30. Декабря 2010 :: 08:58
Печать  
JBoy писал(а) 30. Декабря 2010 :: 07:33:
запрос вроде как заработал, но все же мне надо группировать по категории

При группировке необходимо указать ее функцию... если я правильно понял - тебе нужна сумма...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать