Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема как совместить distinct и order by (число прочтений - 2151 )
kalleka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 02. Марта 2009
как совместить distinct и order by
13. Марта 2009 :: 11:22
Печать  
Собственно проблема в том, что когда ввожу distinct, выдается ошибка
State 42000, native 145, message [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

Как собственно обойти это
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: как совместить distinct и order by
Ответ #1 - 13. Марта 2009 :: 12:49
Печать  
Для начала привести код и сказать что к чему.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
kalleka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 02. Марта 2009
Re: как совместить distinct и order by
Ответ #2 - 13. Марта 2009 :: 13:02
Печать  
           |SELECT
           |       ОстаткиТМЦОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура]
           |      , $TabSpr.Хозяин [Хозяин $Справочник.ХозяинНом]
           |      , TabSpr.Code Код
           |      , ОстаткиТМЦОстатки.Склад [Склад $Справочник.Склады]
           |      , $ОстаткиНоменклатуры.остаток as МинОст
           |      , $ОстаткиНоменклатуры2.остаток as МаксОст
           |      , ОстаткиТМЦОстатки.КоличествоОстаток Кол
           |      , case when  (Подзапрос.КоличествоОстаток=0) then null
           |      else ествоОстаток)
           |end              as Сумма
           |,            case when  (Подзапрос.КоличествоОстаток=0) then null
           |                  else ествоОстаток)
           |            end              as СуммаР
           |,            case when  (Подзапрос.КоличествоОстаток=0) then null
           |                  else ((Подзапрос.СуммаРубОстаток/Подзапрос.КоличествоОстаток))
           |            end              as Себестоимость
       |
           |, РезервыТМЦОстатки.КоличествоОстаток КолР
       |, ОстаткиТМЦОстатки.КоличествоОстаток Кол
         |    ,CASE WHEN (($ОстаткиНоменклатуры.остаток/2-ОстаткиТМЦОстатки.КоличествоОстаток)>0)    Then ($ОстаткиНоменклатуры.остаток/2-ОстаткиТМЦОстатки.КоличествоОстаток) else 0 end as КолД
         |    ,CASE WHEN (($ОстаткиНоменклатуры.остаток/2-ОстаткиТМЦОстатки.КоличествоОстаток)>0)    Then (($ОстаткиНоменклатуры.остаток/2-ОстаткиТМЦОстатки.КоличествоОстаток)*(case when  (Подзапрос.КоличествоОстаток=0) then null
           |                  else ((Подзапрос.СуммаРубОстаток/Подзапрос.КоличествоОстаток))
           |            end)) else 0 end as СуммаД
         //|    ,CASE WHEN ((МинОст/2-Кол)>0)    Then (МинОст/2-Кол)*Себестоимость else 0 end as СуммаД

           |FROM $РегистрОстатки.ОстаткиТМЦ(:КонДата~,,"+ СтрокаУсловия +"
           |            ,(Фирма,Номенклатура,Склад),) AS ОстаткиТМЦОстатки
           |      LEFT OUTER JOIN (SELECT ПартииНаличиеОстатки.Номенклатура
           |                  , ПартииНаличиеОстатки.СуммаРубОстаток
           |                  , ПартииНаличиеОстатки.КоличествоОстаток
           |            FROM $РегистрОстатки.ПартииНаличие(,,,
           |                        Номенклатура,
           |                        (СуммаРуб, Количество)) AS ПартииНаличиеОстатки) AS Подзапрос ON ОстаткиТМЦОстатки.Номенклатура = Подзапрос.Номенклатура
           |LEFT OUTER JOIN $РегистрОстатки.РезервыТМЦ(:КонДата~,,,
           |      ( Номенклатура, Склад),) AS РезервыТМЦОстатки ON ОстаткиТМЦОстатки.Номенклатура = РезервыТМЦОстатки.Номенклатура
           | AND ОстаткиТМЦОстатки.Склад = РезервыТМЦОстатки.Склад
           |      LEFT OUTER JOIN
         |  $Справочник.Номенклатура As  TabSpr  ON ОстаткиТМЦОстатки.Номенклатура = TabSpr.ID 
     $Справочник.ОстаткиНоменклатуры AS ОстаткиНоменклатуры ON (TabSpr.ID = ОстаткиНоменклатуры.PARENTEXT)
           |                        AND($ОстаткиНоменклатуры.Склад  = ОстаткиТМЦОстатки.Склад) AND ($ОстаткиНоменклатуры.ВидОстатка  = :Мин)
           |      LEFT OUTER JOIN $Справочник.ОстаткиНоменклатуры AS ОстаткиНоменклатуры2 ON (TabSpr.ID = ОстаткиНоменклатуры2.PARENTEXT)
           |                        AND ($ОстаткиНоменклатуры2.Склад  = ОстаткиТМЦОстатки.Склад)AND ($ОстаткиНоменклатуры2.ВидОстатка  = :Макс) 
           |Order by
         |  $TabSpr.Хозяин, гр1,гр2,гр3,гр4,  TabSpr.DESCR, ОстаткиТМЦОстатки.Склад
           |";


вот часть моего запроса - склад,номенклатура, себестоимость по фирме, резерв по складу.  Проблема в том, что многие строки задваивабтся, затравиваются ит.д. - видимо причина в том что где то что то криво присоединяю, никак не пойму что - везде левое внешнее соединение
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: как совместить distinct и order by
Ответ #3 - 13. Марта 2009 :: 13:21
Печать  
Скажу честно - ниасилил я такой поток мысли. Может пятница 13 влияет, а может еще что. Я так понял пользуется 2 регистра (остатков и резервов)? По идее их нужно объединить по Товару, Фирме и т.п.
Код слишком большой. Попробую завтра глянуть, а то щас туго сообразить в такой каше что-то.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: как совместить distinct и order by
Ответ #4 - 13. Марта 2009 :: 13:28
Печать  
Не проще сделать запрос к каждому регистру и объединить через UNION ? Я думаю и код будет более понятен и отловить где неправильно цифру выдает  - проще.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
kalleka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 02. Марта 2009
Re: как совместить distinct и order by
Ответ #5 - 13. Марта 2009 :: 13:31
Печать  
делал одним запросом, потому что себестоимость рассчитывается по всем фирмам и складам(регистр партии наличие), а резервы и остатки по складу.. фирмы вообще не интересны
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать