Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с запросом!  [new]
stargazer
Guest
Привет всем! Народ, помогите, плиз ....есть табличка uit_inventval : (ее часть выглядит так)
idInvent idGroup sValue(тип char) iNum dDate
684 19 536870912 1 2009-08-17 14:28:00
684 19 536870912 2 2009-08-17 14:28:00
684 20 667 1 2009-08-17 14:28:00
684 20 667 2 2009-08-17 14:28:00
684 21 DIMM0 1 2009-08-17 14:28:00
684 21 DIMM1 2 2009-08-17 14:28:00
684 19 134217728 1 2009-07-01 08:30:00
684 19 134217728 2 2009-07-01 08:30:00
684 21 DIMM1 1 2009-07-01 08:30:00
684 21 DIMM2 2 2009-07-01 08:30:00

и есть запрос
SELECT case when ISNUMERIC(UIT_InventVal.sValue)=1
THEN convert(decimal(12,0), UIT_InventVal.sValue ) when ISNUMERIC(UIT_InventVal.sValue)=0
then 0 END /1048576 sValue1, UIT_InventVal.idInvent idInvent, UIT_InventVal.iNum iNum, UIT_InventVal.dDate dDate, UIT_InventVal_1.sValue sValue_d FROM (UIT_InventVal INNER JOIN UIT_InventVal UIT_InventVal_1 ON (UIT_InventVal.idInvent = UIT_InventVal_1.idInvent and UIT_InventVal.iNum = UIT_InventVal_1.iNum AND UIT_InventVal.idGroup = UIT_InventVal_1.idGroup-2
and year(UIT_InventVal.dDate)=year(UIT_InventVal_1.dDate) and month(UIT_InventVal_1.dDate)=month(UIT_InventVal.dDate) and day(UIT_InventVal.dDate)=day(UIT_InventVal_1.dDate)))
WHERE UIT_InventVal.idGroup in (19,20,21) and ( left(UIT_InventVal_1.sValue,4)='DIMM' or left(UIT_InventVal_1.sValue,1)='A' )
результат такой:
512.00000000 684 1 2009-08-17 14:28:00 DIMM0
512.00000000 684 2 2009-08-17 14:28:00 DIMM1
128.00000000 684 1 2009-07-01 08:30:00 DIMM1
128.00000000 684 2 2009-07-01 08:30:00 DIMM2
512.00000000 685 1 2009-07-01 08:30:00 A0
512.00000000 685 2 2009-07-01 08:30:00 A1
256.00000000 686 1 2004-08-04 00:01:00 A0
256.00000000 686 2 2004-08-04 00:01:00 A1
а требуется что бы если есть 2 или более различных дат брался результат последней инвентаризации.....т.е в случае idInvent=684 было бы только 2 строки
512.00000000 684 1 2009-08-17 14:28:00 DIMM0
512.00000000 684 2 2009-08-17 14:28:00 DIMM1

ай нид хэлп!!! заранее всем спасибо.....
25 авг 09, 14:34    [7577363]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
SELECT top 1 with ties
       case when ISNUMERIC(UIT_InventVal.sValue)=1
            THEN convert(decimal(12,0), UIT_InventVal.sValue ) 
            when ISNUMERIC(UIT_InventVal.sValue)=0
            then 0 
        END /1048576 sValue1
      ,UIT_InventVal.idInvent idInvent
      ,UIT_InventVal.iNum iNum
      ,UIT_InventVal.dDate dDate
      ,UIT_InventVal_1.sValue sValue_d
  FROM (UIT_InventVal 
 INNER JOIN UIT_InventVal UIT_InventVal_1 ON (UIT_InventVal.idInvent = UIT_InventVal_1.idInvent 
                                          and UIT_InventVal.iNum = UIT_InventVal_1.iNum 
                                          AND UIT_InventVal.idGroup = UIT_InventVal_1.idGroup-2
                                          and year(UIT_InventVal.dDate)=year(UIT_InventVal_1.dDate) 
                                          and month(UIT_InventVal_1.dDate)=month(UIT_InventVal.dDate) 
                                          and day(UIT_InventVal.dDate)=day(UIT_InventVal_1.dDate)
                                              )
        )
 WHERE UIT_InventVal.idGroup in (19,20,21) 
   and (    left(UIT_InventVal_1.sValue,4)='DIMM' 
         or left(UIT_InventVal_1.sValue,1)='A' 
        ) 
 order by rank() over(partition by UIT_InventVal.idInvent order by UIT_InventVal.dDate desc)
добавленное мной - выделено

само собой, не проверял, ибо не на чем,
поэтому могут быть ошибки, в т.ч. синтаксические
25 авг 09, 14:42    [7577430]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом!  [new]
stargazer
Guest
Паганель,
СПАСИБО ОГРОМНОЕ!!! ВСЕ ПОЛУЧИЛОСЬ!!!
НЕ Буду Вас просить объяснить смысл этих операторов - почитаю в мсдн .....спасибо еще раз!!!!!
25 авг 09, 14:45    [7577463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить