Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнение нескольких полей  [new]
HanIP
Member

Откуда:
Сообщений: 9
СREATE FUNCTION dbo.FMain (@Uchastok int,@date datetime,@UDALEN BIT)
RETURNS table as  
return(SELECT     dbo.Abonent.LC AS [Л/С], dbo.Abonent.FIO AS [Фамилия, Имя, Отчество], dbo.Abonent.ID, dbo.NP.Punct AS [Населенный пункт], 
                      dbo.Ulica.NAME AS Улица, dbo.Abonent.Dom AS Дом, dbo.Abonent.Korpus AS Корпус, dbo.Abonent.Kv AS Квартира, dbo.Abonent.Date1 AS [Дата н.], 
                      dbo.Abonent.Date2 AS [Дата к.],dbo.Abonent.Sud,
(select max(Vodomer) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as Vod,
(select isnull(v1_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v1_p,
(select isnull(v2_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v2_p,
(select isnull(v3_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v3_p,
(select isnull(v4_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v4_p,
(select isnull(vh_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as vh_p,
(SELECT     sum(dbo.Lgotj.KOl) AS kol
FROM         dbo.Lgotj 
where (dbo.Lgotj.id_abon=dbo.Abonent.Id)and(dbo.Lgotj.date1<@date)and(dbo.Lgotj.date2>@date)) as Lgot
FROM         dbo.Abonent  LEFT OUTER JOIN
                      dbo.Ulica ON dbo.Abonent.Ulica = dbo.Ulica.ID LEFT OUTER JOIN
                      dbo.NP ON dbo.Abonent.NP = dbo.NP.ID
where (Uchastok=@uchastok)AND(Udalen=@Udalen)
)
Проблема в
2 июл 09, 21:05    [7370737]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение нескольких полей  [new]
HanIP
Member

Откуда:
Сообщений: 9
(select isnull(v1_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v1_p,
(select isnull(v2_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v2_p,
(select isnull(v3_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v3_p,
(select isnull(v4_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as v4_p,
(select isnull(vh_p,0) from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)) as vh_p,
фактически нужно меньшая дата из пяти этих полей, как это можно сделать, помогите пожалуйста.
2 июл 09, 21:06    [7370740]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение нескольких полей  [new]
Козьма Прутков
Member

Откуда: Москва
Сообщений: 186
HanIP,
можно попробовать сплясать от такой мысли:
select min(v_d) from (
select v1_p from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)
union all
select v2_p from abonentedit where (date1<@date)and(Date2>@date)and(ID_abon=dbo.Abonent.id)
...
) tmp
2 июл 09, 22:27    [7370897]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение нескольких полей  [new]
aleks2
Guest
проще надо быть

select (select min(x) 
            FROM 
            (select isnull(v1_p,0) as x 
             UNION ALL 
             select isnull(v2_p,0)
             UNION ALL 
             select isnull(v3_p,0)
             UNION ALL 
             select isnull(v4_p,0)
             UNION ALL 
             select isnull(vh_p,0)
            ) y
         ) as 
FROM 
abonentedit 
where (date1<@date) and (Date2>@date) and (ID_abon=dbo.Abonent.id)
3 июл 09, 07:52    [7371393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить