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

Откуда:
Сообщений: 121
Друзья, возникла следующая проблема :(

Немного доработал,
elect  InvNumber, CarNumber,SendDate,ReceiveDate,IDSourceSt,IDDestSt,ExpCode,OutInfo  from dl 
where ExpCode <> '88888888'  and  CarNumber = '50000801' and OutInfo = '1' and
SendDate between '20130101'and '20130327'

ORDER BY CarNumber,SendDate;

with cte as
(  select CarNumber, SendDate, ReceiveDate, IDSourceSt, IDDestSt,ExpCode,InvNumber,OutInfo,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl where SendDate between '20130101'and '20130327' and ExpCode <> '88888888' and ExpCode <> '2222222'  and OutInfo = '1' and CarNumber <> 0 
   and CarNumber= '50000801'
)
select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.ExpCode, c1.IDSourceSt, c1.IDDestSt,c1.ExpCode,c1.OutInfo, c2.IDDestSt as Prev_IDDestSt, c2.CarNumber as Prev_CarNumber
from cte c1
     inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
where c2.IdDestSt <> c1.IDSourceSt ;


Вот что выдает : Рис 1 запрос, рис 2 в базе как, то есть в запросе он отсортировал не в том порядке в итоге ошибка. Как подправить? Подскажите пожалуйста.

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

Откуда:
Сообщений: 121
Одну строку не скопировал, не понятно почему выделяет 3 строку во второй таблице, если предыдущее значение правильное.
Кусок из excel.
50000801 И0814468 04.01.2013 7:03 Карталы I (эксп.) Аллагуват 0 True
50000801 И0814468 04.01.2013 7:03 Карталы I (эксп.) Черниковка-восточная 0 True
50000801 ЭФ880947 04.02.2013 20:15 Черниковка-восточная Новоуфимская 1 True
50000801 ЭФ937150 06.02.2013 5:03 Новоуфимская Сибай 1 True
50000801 ЭФ983397 10.02.2013 6:38 Сибай Новоуфимская 1 True
50000801 ЭХ257698 13.02.2013 17:25 Новоуфимская Оренбург 1 True
50000801 ЭХ362778 18.02.2013 9:58 Оренбург Загородняя 1 True
50000801 ЭЦ171330 07.03.2013 15:14 Загородняя Сорочинская 1 True
50000801 ЭЦ351936 12.03.2013 18:00 Сорочинская Загородняя 1 True
2 апр 13, 14:22    [14126629]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
PavelAA
Вот что выдает : Рис 1 запрос, рис 2 в базе как, то есть в запросе он отсортировал не в том порядке в итоге ошибка.

Какая ошибка? Текст ошибки можно увидеть?
2 апр 13, 15:05    [14126854]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Ошибки нет, просто почему то сортирует неправильно :) Или отображает) Вы если посмотрите на картинку где цифра 1, первые 4 строчки, это как сортирует запрос!
А вот как выдает программа откуда берутся данные
50000801 И0814468 04.01.2013 7:03:00 Карталы I (эксп.) Аллагуват
50000801 И0814468 04.01.2013 7:03:00 Карталы I (эксп.) Аллагуват
50000801 И0814468 04.01.2013 7:03:00 Карталы I (эксп.) Черниковка-восточная
50000801 ЭФ880947 04.02.2013 20:15:11 Черниковка-восточная Новоуфимская

Получается, что (50000801 ЭФ880947 04.02.2013 20:15:11 Черниковка-восточная Новоуфимская) не должна попадать во вторую таблицу. Программа берет данные из той же таблицы.
2 апр 13, 15:31    [14127008]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

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

Если SendDate в таблице дублируется, то делайте сортировку по какому-то другому критерию, который обеспечит требуемый порядок записей. Когда данные выдаёт программа, по каким полям делается сортировка?
2 апр 13, 15:47    [14127096]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
В том то и дело, что по полю SendDate. Сейчас сам попробую поиграться с условиями)
2 апр 13, 16:11    [14127275]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
PavelAA
В том то и дело, что по полю SendDate.

То есть вы посмотрели в текст запроса, выполняемого программой, и увидели там, что нет никакой другой сортировки, кроме как по SendDate?
2 апр 13, 16:17    [14127327]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
select  InvNumber, CarNumber,SendDate,ReceiveDate,IDSourceSt,IDDestSt,ExpCode,OutInfo  from dl 
where ExpCode <> '88888888'    and  CarNumber = '50000801'  --and OutInfo = '1'
and SendDate between '20130101'and '20130402'

order by SendDate ASC ;

with cte as
(  select CarNumber, SendDate, ReceiveDate, IDSourceSt, IDDestSt,ExpCode,InvNumber,OutInfo,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl where SendDate between '20130101'and '20130402' and ExpCode <> '88888888' and ExpCode <> '2222222'   and CarNumber <> 0 --and OutInfo = '1'
   and CarNumber= '50000801'
)
select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.ExpCode, c1.IDSourceSt, c1.IDDestSt,c1.ExpCode,c1.OutInfo, c2.IDDestSt as Prev_IDDestSt
from cte c1
     inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
where c2.IdDestSt <> c1.IDSourceSt ;


Вот когда я не ставлю условие, что OutInfo = '1' он мне выдает правильно как на картинке, как ставлю результат не верный :( Мне нужны только единички где, в программе когда ставишь 1 строки не перемешиваются. Не знаю как быть в данной ситуации...

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

Откуда:
Сообщений: 121
С данной проблемой справился :) Возник такой вопросик, у меня получается таблица соединена по CarNumber, а как мне соединить по другому полю из другой таблица (Например таблица называется tell поле TesId. И второй вопрос, чтобы сначала если есть заполненные колонки IdIn и IdOut, то по ним смотрела проверку, если же нет то так как сейчас :) буду благодарен за помощь) Не ругайтесь пожалуйста :)
3 апр 13, 15:58    [14131888]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Помогите пожалуйста :( Как быть с CarNumber, если у них тока одно поле общее... во второй таблице нет CarNumber...
3 апр 13, 17:40    [14132357]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
PavelAA,
занчит у вас где-то есть еще таблица гдеи прописанны "другие" связи
Иили исчите как таки связать -иначе никак
3 апр 13, 17:44    [14132370]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
может можно как то к исходной таблице прицепить таблицу tell, соединяются они по полю
IDSourceSt и testid

select InvNumber, CarNumber,SendDate,ReceiveDate,IDSourceSt,IDDestSt,ExpCode,OutInfo,StatusRecord from dl
where ExpCode <> '88888888' and ExpCode <> '2222222' and CarNumber = '50000140' and SendDate between '20130101'and '20130403' and OutInfo <> '0'
and StatusRecord = '0'
order by SendDate;
with cte as
( select CarNumber, SendDate, ReceiveDate, IDSourceSt, IDDestSt,ExpCode,InvNumber,OutInfo,
row_number() over(partition by CarNumber order by SendDate) as rownum
from dl where SendDate between '20130101'and '20130403' and ExpCode <> '88888888' and ExpCode <> '2222222' and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
-- and CarNumber= '50000405'
)
select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.ExpCode, c1.IDSourceSt, c1.IDDestSt,c1.ExpCode,c1.OutInfo, c2.IDDestSt as Prev_IDDestSt
from cte c1
inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1
where c2.IdDestSt <> c1.IDSourceSt
order by c1.CarNumber

Очень нужна ваша помощь(
4 апр 13, 09:10    [14133779]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
может можно как то к исходной таблице прицепить таблицу tell, соединяются они по полю
IDSourceSt и testid

Вы спрашиваете разрешение на соединение в своем запросе ?
или просите провести анализ вашей структуры для выяснения, как могут быть соединены произвольные таблицы ?
4 апр 13, 09:19    [14133808]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Glory
PavelAA
может можно как то к исходной таблице прицепить таблицу tell, соединяются они по полю
IDSourceSt и testid

Вы спрашиваете разрешение на соединение в своем запросе ?
или просите провести анализ вашей структуры для выяснения, как могут быть соединены произвольные таблицы ?


Я хочу понять можно ли к полученной таблице в результате соединения, присоединить еще одну. Или я неправильно мыслю?
4 апр 13, 09:43    [14133894]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
Я хочу понять можно ли к полученной таблице в результате соединения, присоединить еще одну.

JOIN можно использовать сколь угодно много раз. Пока у сервера хватит ресурсов.
4 апр 13, 09:47    [14133910]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Glory
PavelAA
Я хочу понять можно ли к полученной таблице в результате соединения, присоединить еще одну.

JOIN можно использовать сколь угодно много раз. Пока у сервера хватит ресурсов.


Вот я и хочу попробовать) Но не знаю как по синтаксису вставить :(
4 апр 13, 09:51    [14133926]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
Вот я и хочу попробовать) Но не знаю как по синтаксису вставить

Открыть хелп и изучить синитаксис не пробовали ?
4 апр 13, 09:54    [14133942]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Glory
PavelAA
Вот я и хочу попробовать) Но не знаю как по синтаксису вставить

Открыть хелп и изучить синтаксис не пробовали ?


Спасибо за совет, я просто привык на примерах изучать.... Еще вопрос про условие остается актуальным, как смотреть приоритетное условие...
4 апр 13, 10:02    [14133987]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
Спасибо за совет, я просто привык на примерах изучать...

Вы не поверите, но в хелпе и примеры есть
Кроме того, join есть даже в вашем запросе.
Что вам мешает разобрать свой же запрос в качестве примера ?
4 апр 13, 10:04    [14133993]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

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

Со своим запросом я более менее разобрался, посмотрел по частям. Сейчас стоит задача, чтобы так же все считало, но у меня нет CarNumber в моей таблице. Так же я не очень понимаю как в sql выглядят условия ( до этого работал с 1С ) , как в sql записать условие, что если есть IDSourceSt2, IDDestSt2 ( значения заполнены), то брать мою формулу по ним, если их нет, то как сейчас. Еще раз прошу прощения за такие вопросы... В выходные засяду за изучением, сейчас такой возможности не имею Не посылайте в google и хелп :(
order by  SendDate;
with cte as
(  select CarNumber, SendDate, ReceiveDate, IDSourceSt, IDDestSt,ExpCode,InvNumber,OutInfo,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl where SendDate between '20130101'and '20130403' and ExpCode <> '88888888' and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  -- and CarNumber= '50000405'
) 
select c1.InvNumber, c2.invnumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.ExpCode, c1.IDSourceSt, c1.IDDestSt,c1.ExpCode,c1.OutInfo, c2.IDDestSt as Prev_IDDestSt
from cte c1
     inner join cte c2 on c2.CarNumber = c1.CarNumber and c2.rownum = c1.rownum - 1 
where c2.IdDestSt <> c1.IDSourceSt 
order by c1.CarNumber 
4 апр 13, 10:59    [14134359]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
PavelAA
как в sql записать условие, что если есть IDSourceSt2, IDDestSt2 ( значения заполнены), то брать мою формулу по ним, если их нет, то как сейчас

Что такое IDSourceSt2, IDDestSt2? В запросе их нет.
Как выглядит ваша формула?

Вот такое хотите?
CASE
    WHEN IDSourceSt2 IS NOT NULL AND IDDestSt2 IS NOT NULL
    THEN брать мою формулу по ним
    ELSE как сейчас
END
4 апр 13, 11:10    [14134447]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Гость333 во-первых спасибо вам уже за помощь)

Объясню суть, c1.IDSourceSt, c1.IDDestSt - это столбцы которые мы задействуем в формуле, у них числовое обозначение. В таблице tell есть поле Name, которое содержит имя ( для примера пусть будет Иванов) и поле TesId которое равно полю IDSourceSt из таблицы dl.

1. Мне надо как то исключить вот такие варианты

IDSourceSt IDDestSt
4792 14454
14450 4792

В тексте это выглядит так
IDSourceSt IDDestSt
Петров Иванов
Иванов П Петров

Иванов и Иванов П это по сути одно и тоже, что видно из таблицы TesId

2. В первом запросе который вы написали, нужно чтобы если поля заполнены IDSourceSt2 IDDestSt2 то сравнивало их, а если не заполнено, тогда брало значения как сейчас. Надеюсь понятно объяснил(
4 апр 13, 11:29    [14134597]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
и поле TesId которое равно полю IDSourceSt из таблицы dl.

И что тогда мешает соединить эти таблицы по этим полям ?
4 апр 13, 11:32    [14134615]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Glory
PavelAA
и поле TesId которое равно полю IDSourceSt из таблицы dl.

И что тогда мешает соединить эти таблицы по этим полям ?


Мешает то, что тогда нарушается формула, потому что CarNumber там нет.
select  InvNumber, CarNumber,SendDate,ReceiveDate,IDSourceSt,IDDestSt,ExpCode,OutInfo,StatusRecord,SourceStCode,DestStCode  from dl 
where ExpCode <> '88888888'  and ExpCode <> '2222222'  and  CarNumber = '50000140' and SendDate between '20130101'and '20130403' and OutInfo <> '0' 
and StatusRecord = '0'
order by  SendDate;
with cte as
(  select CarNumber, SendDate, ReceiveDate, IDSourceSt, IDDestSt,ExpCode,InvNumber,OutInfo,SourceStCode,DestStCode,
          row_number() over(partition by CarNumber order by SendDate) as rownum 
   from  dl where SendDate between '20130101'and '20130403' and ExpCode <> '88888888' and ExpCode <> '2222222'   and CarNumber <> 0 and OutInfo <> '0' and StatusRecord = '0'
  -- and CarNumber= '50000405'
)
select c1.InvNumber, c1.CarNumber, c1.SendDate, c1.ReceiveDate, c1.ExpCode, c1.SourceStCode, c1.DestStCode,c1.ExpCode,c1.OutInfo, c2.Code as Prev_IDDestSt
from cte c1
     [color=red]inner join tell c2 on c2.TesId = c1.SourceStCode --and c2.rownum = c1.rownum - 1 
where c2.TesId <> c1.SourceStCode[/color]
order by c1.CarNumber 
4 апр 13, 11:39    [14134669]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
inner join tell c2 on c2.TesId = c1.SourceStCode and c2.rownum = c1.rownum - 1
where c2.TesId <> c1.SourceStCode
4 апр 13, 11:41    [14134677]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7 8   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить