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

Откуда:
Сообщений: 24290
CASE

Вот мне просто инетерсно ,сколько еще статей с документации сюда запостят
4 апр 13, 14:10    [14135762]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Все очень печально :( Какой есть выход?
4 апр 13, 14:11    [14135766]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.SourceStCode, c1.DestStCode,c1.ExpCode,c1.OutInfo,c1.Code,c1.ForeignSourceStCode,c1.ForeignDestStCode, c2.DestStCode as Prev_IDDestSt

from cte c1

inner join cte c2 on c2.CarNumber = c1.CarNumber
where c2.rownum = c1.rownum - 1
   and  c1.ForeignSourceStCode Not Null 
   and c1.ForeignDestStCode Not Null
   and  c2.ForeignDestStCode <> c1.ForeignSourceStCod
UNION
 select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.SourceStCode, c1.DestStCode,c1.ExpCode,c1.OutInfo,c1.Code,c1.ForeignSourceStCode,c1.ForeignDestStCode, c2.DestStCode as Prev_IDDestSt

from cte c1

inner join cte c2 on c2.CarNumber = c1.CarNumber
where c2.rownum = c1.rownum - 1
   and  c1.ForeignSourceStCode IS  Null 
   and c1.ForeignDestStCode IS  Null
   and  c2.DestStCode <> c1.SourceStCode  
order by c1.CarNumber

Хотя я уже не уверен ,что вы вообще в итоге хотите получить
4 апр 13, 14:17    [14135815]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx, я так понял условия не сработают, я хотел чтобы если c1.ForeignSourceStCode Not Null and c1.ForeignDestStCode Not Null ( то есть если не пустые) тогда c2.ForeignDestStCode <> c1.ForeignSourceStCode иначе как было c2.DestStCode <> c1.SourceStCode
4 апр 13, 14:24    [14135859]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA,

покажите код где вы ето вписывате ? хоть с закоментироваными вами строками...
4 апр 13, 14:27    [14135877]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx, я про Case говорил). Просто по вашему коде, если я правильно понял получается, что мы объединяем 2 условия. Ругается сразу Неправильный синтаксис около ключевого слова "Null". Выделяя c1.ForeignSourceStCode и Null
4 апр 13, 14:38    [14135942]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сам разобрался, IS Not Null вот так работает!
4 апр 13, 14:51    [14136004]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA,
вместо
автор
c1.ForeignSourceStCode Not Null

надо
автор
c1.ForeignSourceStCode IS NOT NULL
- опечатался
вы хоть базовое в T-SQL знаете ?
4 апр 13, 14:51    [14136006]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Здравствуйте, никак не могу добавить условие( Вот в чем проблема. Надо как то связать, чтобы и у IDDestSt при значении 14454 был CodeGroupe 98130 и у IDSourceSt при значении 14450 был CodeGroupe 98130. В самой таблице я это забил. (
Копипаст qStation
Id, CodeGroup
14450 98130
14451 98130
14452 98130
14453 98130
14454 98130

Если связываю так
 select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on  IDSourceSt = Id


то
IDSourceSt,IDDestSt,CodeGroupe
19745 14454 97040
14450 4792 98130

если

 select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on  IDDestSt = Id


то
IDSourceSt,IDDestSt,CodeGroupe
19745 14454 98130
14450 4792 93240
17 апр 13, 15:10    [14193180]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Вопрос актуален!
18 апр 13, 08:47    [14196306]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Может как то к этой конструкции можно привязать еще раз, чтобы Codegroup получить предыдущий?
with cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on   IDSourceSt = fa.dbo.qstation.id 
   where SendDate between '20130101'and '20130403'  and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  and ExpCode <> '88888888' 
  and CarNumber= '50000140'  

) 
select c1.InvNumber,c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt,c1.CodeGroup,c1.name, c2.IDDestSt as Prev_IDDestSt

from cte c1

inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1  
18 апр 13, 11:32    [14197270]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Подниму в надежде на ответ(
19 апр 13, 10:19    [14201982]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Попроставляйте алисаы плиз,бо понять с какой таблицы идет какая колонка не реально,а перечитывать все 5 стр и вникать - некогда.
19 апр 13, 10:25    [14202028]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Вот весь код. Как уже писал связываю с таблицей "inner join qStation on IDSourceSt = fa.dbo.qstation.id "
Вот структура qStation ( написал нужные колонки). Id из qstation равен значениям из dl колонкам (IDSourceSt,IDDestSt).
Id, CodeGroup
14450 98130
14451 98130
14452 98130
14453 98130
14454 98130


with cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on   IDSourceSt = fa.dbo.qstation.id 
   where SendDate between '20130101'and '20130403'  and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  and ExpCode <> '88888888' 
  --and CarNumber= '50000140'  

) 
select c1.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt, c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.CodeGroup,c2.CodeGroup,c1.name,c2.name, c2.IDDestSt as Prev_IDDestSt

from cte c1

inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
where 
     c1.ForeignSourceStCode IS Not Null 
   and c1.ForeignDestStCode IS Not Null
   and     c2.ForeignDestStCode <> c1.ForeignSourceStCode 
UNION
 select c1.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt,c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.CodeGroup,c2.CodeGroup,c1.name,c2.name,c2.IDDestSt as Prev_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  
order by c1.CarNumber
19 апр 13, 10:37    [14202110]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
вот ето
автор
row_number() over(partition by CarNumber order by SendDate)

как т о соотноситься с вашими предположеними по
автор
d, CodeGroup
14450 98130
14451 98130
14452 98130
14453 98130
14454 98130

Т.е. всегда ли преидущеей дате будет соответвовать предидущий CodeGroup ?
19 апр 13, 10:50    [14202210]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx
вот ето
автор
row_number() over(partition by CarNumber order by SendDate)

как т о соотноситься с вашими предположеними по
автор
d, CodeGroup
14450 98130
14451 98130
14452 98130
14453 98130
14454 98130

Т.е. всегда ли преидущеей дате будет соответвовать предидущий CodeGroup ?


Не всегда, как раз данный расхождения и нужно найти! В таком ввиде все работает, но у меня есть такие ситуации, когда IDDestSt = 14454, а IDSourceSt = 14450 вот здесь он и показывает эту строку. В данном случае не вдаваясь в подробности( у них одно наименование) надо как то исключить данные строки, поэтому есть таблица qstation где у этих id один CodeGroup

id, CodeGroup
14450 98130
14451 98130
14452 98130
14453 98130
14454 98130
19 апр 13, 11:02    [14202268]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA
IDDestSt = 14454, а IDSourceSt = 14450

а по каким критериям исключать ? какой в итоге должен попасть в выборку то ?
19 апр 13, 11:13    [14202333]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx
PavelAA
IDDestSt = 14454, а IDSourceSt = 14450

а по каким критериям исключать ? какой в итоге должен попасть в выборку то ?


CodeGroup у них одинаковый 98130, в выборке должны остаться те где из прошлый строки IDDestSt не равен IDSourceSt.
19 апр 13, 11:25    [14202412]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA
IDDestSt не равен IDSourceSt.

ну и где у вас такое условие ?
19 апр 13, 11:33    [14202462]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx
PavelAA
IDDestSt не равен IDSourceSt.

ну и где у вас такое условие ?


Сравнивает строки, c2.IDDestSt as Prev_IDDestSt показывает предыдущий IDDestSt. В данном коде работает, действительно выдает только где с2.IDDestSt <> с1.IDSourceSt
19 апр 13, 11:39    [14202516]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
:( нет ответа
19 апр 13, 14:44    [14204202]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
with cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on   IDSourceSt = fa.dbo.qstation.id 
   where SendDate between '20130101'and '20130403'  and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  and ExpCode <> '88888888' 
  --and CarNumber= '50000140'  

) 

 select c1.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt,c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.CodeGroup,c2.CodeGroup,c1.name,c2.name,c2.IDDestSt as Prev_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  
order by c1.CarNumber


т.е. вот так вы получаете правильный результат ?
19 апр 13, 15:31    [14204640]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx
with cte as
(  select CarNumber, SendDate, ReceiveDate, ExpCode,InvNumber,OutInfo,IDSourceSt,IDDestSt,ForeignSourceStCode,ForeignDestStCode,CodeGroup,name,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl       inner join qStation on   IDSourceSt = fa.dbo.qstation.id 
   where SendDate between '20130101'and '20130403'  and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  and ExpCode <> '88888888' 
  --and CarNumber= '50000140'  

) 

 select c1.InvNumber,  c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.IDSourceSt, c1.IDDestSt,c1.OutInfo,c1.ExpCode,c1.ForeignSourceStCode,c1.ForeignDestStCode,c1.CodeGroup,c2.CodeGroup,c1.name,c2.name,c2.IDDestSt as Prev_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  
order by c1.CarNumber


т.е. вот так вы получаете правильный результат ?


да, тока без этого inner join qStation on IDSourceSt = fa.dbo.qstation.id
19 апр 13, 15:42    [14204749]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA,

тогда зачем он вам нужен ?
19 апр 13, 15:51    [14204841]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Maxx
PavelAA,

тогда зачем он вам нужен ?
чтобы взять GroupCode и убрать значения которые я описал ранее
19 апр 13, 16:20    [14205098]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7 8   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить