Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8]      все
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сергей Викт.
PavelAA, первый шаг сделан)
FA.ROSOwnersInterval

Код можно посмотреть?:)



К сожалению я не знаю как, в таблицах нет такой, в зависимостях нашел...

К сообщению приложен файл. Размер - 41Kb
21 май 13, 10:05    [14324644]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Сергей Викт.
PavelAA, первый шаг сделан)
FA.ROSOwnersInterval

Код можно посмотреть?:)



К сожалению я не знаю как, в таблицах нет такой, в зависимостях нашел...


Видимо, это табличная функция. Посмотрите, пожалуйста, в функциях
21 май 13, 10:06    [14324651]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сергей Викт.
Сергей Викт., а вообще, Павел, посмотрите на свой пост, где вы изначально описали задау:
Как сравнить две колонки с условием

там и поля таблиц другие и всё. Либо опишите ПОЛНОСТЬЮ задачу, какие есть таблицы, скрипты их создания, несколько строк с данные и то, что вы хотите получить на выходе. А то получается: мне нужно купить 2 банана, но машина едет быстро на восток....


Ну на первой картинке я результат запроса показал)
На второй уже таблицу R_OS_OWNERS, просто вывел только нужные колонки, относительно третей я написал выше.
21 май 13, 10:07    [14324660]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Сергей Викт.
PavelAA, первый шаг сделан)
FA.ROSOwnersInterval

Код можно посмотреть?:)



К сожалению я не знаю как, в таблицах нет такой, в зависимостях нашел...


Посмотрите в функциях и также, правым тапком, script as -> CREATE...
21 май 13, 10:13    [14324718]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
у меня гребанная русская версия =( Не могу в ней ниче найти!

К сообщению приложен файл. Размер - 48Kb
21 май 13, 10:54    [14325032]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA, открываете базу данных - программирование - функции - находите вашу - правая кнопка мышки - создать скрипт для функции - создание

P.S. Приблизительно так
21 май 13, 10:59    [14325071]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Видимо я полный нуб! Вот здесь я смотрел создание, больше негде! Все облазил!

К сообщению приложен файл. Размер - 103Kb
21 май 13, 11:38    [14325341]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA,

Ищите не в таблицах!

К сообщению приложен файл. Размер - 127Kb
21 май 13, 11:49    [14325432]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
воооооооооо)))
create function [FA].[ROSOwnersInterval] (@db datetime ,@de datetime,@id_os int)   
returns table        
as  
 
return
(
			select   
				ttb.db, ttb.de, ttb.id_os as carnumber, 
				ttb.id_belong BelongID,
				dBelonging.Name BelongName,
				DocumentID, NxtDocumentID,ArendatorID, ArendatorAgrID,
				/*Поле тормозное, нафига оно вам коллеги, даты достаточно?*/
				ROW_NUMBER() OVER (PARTITION BY ttb.id_os ORDER BY ttb.db) Npp      
			from (        
					select         
						case   
							when tt.db<=@db then @db        
							else  tt.db   
						end db ,        
						case   
							when isnull(tt.de,@de)>=@db then case when isnull(tt.de,@de)<=@de then isnull(tt.de,@de) else @de end         
							else  tt.de   
						end de,        
						id_os,      
						id_belong,ID_DOCUMENT DocumentID,NxtDocumentID,ArendatorID, ArendatorAgrID           
					from (        
							select         
								r1.data as db ,         
								RNxt.Data as de,
								r1.id_belong,
								r1.id_os as id_os,
								r1.aid, 
								R1.ID_DOCUMENT, 
								RNxt.ID_DOCUMENT NxtDocumentID,
								/*Об Арендаторе*/
								CASE WHEN r1.id_belong IN (2, 4, 9) THEN r1.ID_Manager END ArendatorID,
								CASE WHEN r1.id_belong IN (2, 4, 9) THEN r1.ID_AGR END ArendatorAgrID 
							from r_os_owners r1
							OUTER APPLY (select top 1 r2.data, r2.ID_DOCUMENT
							               from r_os_owners r2 where r2.data>r1.data and r2.id_os=r1.id_os order by data asc) RNxt
							where @id_os in (-1,r1.id_os)) tt) ttb
			LEFT JOIN dBelonging ON ttb.id_belong = dBelonging.ID 				      
			where
				(ttb.db >= @db and ttb.db <= @de)
				and (ttb.de >= @db and ttb.de <= @de)
				and datediff(second,ttb.db,ttb.de) > cast(isnull(dbo.getConstant('NotCalcMDLessSeconds'),'0') as int)
)		
21 май 13, 12:07    [14325642]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
воооооооооо)))
				/*Поле тормозное, нафига оно вам коллеги, даты достаточно?*/
				ROW_NUMBER() OVER (PARTITION BY ttb.id_os ORDER BY ttb.db) Npp      
				


)) Сильно. Сейчас попробую что-нибудь придумать.
21 май 13, 12:27    [14325856]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Сергей Викт.
PavelAA
воооооооооо)))
				/*Поле тормозное, нафига оно вам коллеги, даты достаточно?*/
				ROW_NUMBER() OVER (PARTITION BY ttb.id_os ORDER BY ttb.db) Npp      
				


)) Сильно. Сейчас попробую что-нибудь придумать.


with CTE_Pav as(
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual] 
FROM R_OS_OWNERS t2
INNER JOIN FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) t3
ON t2.DATA=t3.db AND t2.ID_OS=t3.carnumber 
WHERE t2.IS_ACTUAL=1
),
cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode, InvNumber, OutInfo, IDSourceSt, IDDestSt, ForeignSourceStCode, ForeignDestStCode, Q1.CodeGroup scg, Q2.CodeGroup dcg,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl 
     inner join qStation q1 on IDSourceSt = q1.ID
     inner join qStation q2 on IDDestSt = q2 .ID
   where SendDate between '20130101'and '20130403' 
     and ExpCode <> '2222222'  
        and ExpCode <> '88888888' 
        and CarNumber <> 0     
) 

select c1.InvNumber, c2.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.scg,c2.IDDestSt as Prev_IDDestSt,c2.dcg  as Prev_GroupCode,ISNull(c1.ForeignSourceStCode,c1.IDSourceSt),ISNULL(c1.ForeignDestStCode,c1.IDDestSt)
  from cte c1
    inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
    INNER JOIN CTE_PAV c3 ON c3.ID_OS=c1.CarNumber AND 
    c1.SendDate>=CTE_PAV.Data AND c1.SendDate<=CTE_PAV.de
  where   c1.ForeignSourceStCode IS Null and c1.ForeignDestStCode IS Null and  c2.IDDestSt <> c1.IDSourceSt  and c2.dcg <> c1.scg 
  or  c1.ForeignSourceStCode IS Not Null and c1.ForeignDestStCode IS Not Null and c2.ForeignDestStCode <> c1.ForeignSourceStCode and c2.dcg <> c1.scg 
order by c1.CarNumber

Попробуйте. Приблизительно так.
21 май 13, 12:48    [14326048]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
c1.SendDate>=CTE_PAV.Data AND c1.SendDate<=CTE_PAV.de

вот здесь ругается
The multi-part identifier "CTE_Pav.DATA" could not be bound.
21 май 13, 13:12    [14326326]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
with CTE_Pav as(
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual] 
FROM R_OS_OWNERS t2
INNER JOIN FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) t3
ON t2.DATA=t3.db AND t2.ID_OS=t3.carnumber 
WHERE t2.IS_ACTUAL=1
),
cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode, InvNumber, OutInfo, IDSourceSt, IDDestSt, ForeignSourceStCode, ForeignDestStCode, Q1.CodeGroup scg, Q2.CodeGroup dcg,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl 
     inner join qStation q1 on IDSourceSt = q1.ID
     inner join qStation q2 on IDDestSt = q2 .ID
   where SendDate between '20130101'and '20130403' 
     and ExpCode <> '2222222'  
        and ExpCode <> '88888888' 
        and CarNumber <> 0     
) 

select c1.InvNumber, c2.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.scg,c2.IDDestSt as Prev_IDDestSt,c2.dcg  as Prev_GroupCode,ISNull(c1.ForeignSourceStCode,c1.IDSourceSt),ISNULL(c1.ForeignDestStCode,c1.IDDestSt)
  from cte c1
    inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
    INNER JOIN CTE_PAV c3 ON c3.ID_OS=c1.CarNumber AND 
    c1.SendDate>=c3.Data AND c1.SendDate<=c3.de
  where   c1.ForeignSourceStCode IS Null and c1.ForeignDestStCode IS Null and  c2.IDDestSt <> c1.IDSourceSt  and c2.dcg <> c1.scg 
  or  c1.ForeignSourceStCode IS Not Null and c1.ForeignDestStCode IS Not Null and c2.ForeignDestStCode <> c1.ForeignSourceStCode and c2.dcg <> c1.scg 
order by c1.CarNumber

Ошибся.
21 май 13, 13:15    [14326344]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
157 тыс строк, дубли по carnumber... Мой запрос
with cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode, InvNumber, OutInfo, IDSourceSt, IDDestSt, ForeignSourceStCode, ForeignDestStCode, Q1.CodeGroup scg, Q2.CodeGroup dcg,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl 
     inner join qStation q1 on IDSourceSt = q1.ID
     inner join qStation q2 on IDDestSt = q2.ID
   where SendDate between '20130101'and '20130403' 
     and ExpCode <> '2222222'  
        and ExpCode <> '88888888' 
        and CarNumber <> 0 
        and OutInfo <> '0' 
        and StatusRecord = '0' 
        and (isnull(DUETYPE_ID, 0) <> 29 or ID_TRANSKIND = '2')
        and Summa > 0
	    and carnumber = 50024280

) 
select c1.InvNumber, c2.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.scg,c2.IDDestSt as Prev_IDDestSt,c2.dcg  as Prev_GroupCode,ISNull(c1.ForeignSourceStCode,c1.IDSourceSt),ISNULL(c1.ForeignDestStCode,c1.IDDestSt)
  from cte c1
    inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
  where   c1.ForeignSourceStCode IS Null and c1.ForeignDestStCode IS Null and  c2.IDDestSt <> c1.IDSourceSt  and c2.dcg <> c1.scg 
      or  c1.ForeignSourceStCode IS Not Null and c1.ForeignDestStCode IS Not Null and c2.ForeignDestStCode <> c1.ForeignSourceStCode and c2.dcg <> c1.scg 
	--  and not exists (select  * from FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) where c1.ReceiveDate <db and c2.SendDate >de )
order by c1.CarNumber


оставлял 1900 строк
21 май 13, 13:21    [14326381]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
157 тыс строк, дубли по carnumber... Мой запрос


оставлял 1900 строк


я щас орать начну.... Просили у Вас данные ещё на 6 странице... тестовые. Я же пишу без данных, как я могу что-либо отладить, не имея данных????? Откуда я знаю, сколько и чего вы должны получить?

Идею я вам дал, дальше, думаю, разберетесь.
А то народ совсем обленился...


Засим покидаю топик, удачи....
21 май 13, 13:24    [14326405]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сергей Викт.
PavelAA
157 тыс строк, дубли по carnumber... Мой запрос


оставлял 1900 строк


я щас орать начну.... Просили у Вас данные ещё на 6 странице... тестовые. Я же пишу без данных, как я могу что-либо отладить, не имея данных????? Откуда я знаю, сколько и чего вы должны получить?

Идею я вам дал, дальше, думаю, разберетесь.
А то народ совсем обленился...


Засим покидаю топик, удачи....


Спасибо вам, не обижайтесь) Постараюсь разобраться, первый select верно отбирает...
21 май 13, 13:26    [14326411]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Спасибо вам, не обижайтесь) Постараюсь разобраться, первый select верно отбирает...

На обиженных воду возят (с) :)

Попробуйста такой вариант:
th CTE_Pav as(
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual] 
FROM R_OS_OWNERS t2
INNER JOIN FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) t3
ON t2.DATA=t3.db AND t2.ID_OS=t3.carnumber 
WHERE t2.IS_ACTUAL=1
),
cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode, InvNumber, OutInfo, IDSourceSt, IDDestSt, ForeignSourceStCode, ForeignDestStCode, Q1.CodeGroup scg, Q2.CodeGroup dcg,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl 
     inner join qStation q1 on IDSourceSt = q1.ID
     inner join qStation q2 on IDDestSt = q2 .ID
   where SendDate between '20130101'and '20130403' 
     and ExpCode <> '2222222'  
        and ExpCode <> '88888888' 
        and CarNumber <> 0     
), 
CTE_new AS(
select c1.InvNumber, c2.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.scg,c2.IDDestSt as Prev_IDDestSt,c2.dcg  as Prev_GroupCode,ISNull(c1.ForeignSourceStCode,c1.IDSourceSt),ISNULL(c1.ForeignDestStCode,c1.IDDestSt)
  from cte c1
    inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
    
  where   c1.ForeignSourceStCode IS Null and c1.ForeignDestStCode IS Null and  c2.IDDestSt <> c1.IDSourceSt  and c2.dcg <> c1.scg 
  or  c1.ForeignSourceStCode IS Not Null and c1.ForeignDestStCode IS Not Null and c2.ForeignDestStCode <> c1.ForeignSourceStCode and c2.dcg <> c1.scg 
)
SELECT c1.InvNumber, c2.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.scg,c2.IDDestSt as Prev_IDDestSt,c2.dcg  as Prev_GroupCode,ISNull(c1.ForeignSourceStCode,c1.IDSourceSt),ISNULL(c1.ForeignDestStCode,c1.IDDestSt)
  from cte_new c1 INNER JOIN CTE_PAV c3 ON c3.ID_OS=c1.CarNumber AND 
    c1.SendDate>=c3.Data AND c1.SendDate<=c3.de
order by c1.CarNumber
21 май 13, 13:32    [14326451]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Все получилось)) Еще в пером) я сам немного накосячил((( Спасибо вам огромное!!!! Простите где тупил)))
21 май 13, 13:42    [14326498]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Все получилось)) Еще в пером) я сам немного накосячил((( Спасибо вам огромное!!!! Простите где тупил)))


НУ УРА!!!!!!!!!!!!! Поздравляю!!!
21 май 13, 13:43    [14326504]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Итого : с 28 марта по 21 мая - решалась задача
21 май 13, 13:45    [14326524]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Maxx
Итого : с 28 марта по 21 мая - решалась задача

Я только вчера заметил топик)
21 май 13, 14:00    [14326661]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8]      все
Все форумы / Microsoft SQL Server Ответить