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

Откуда: Москва
Сообщений: 888
PavelAA
Сергей Викт.
Не могли бы вы предоставить скрипт создания таблиц и заполнения?

1 таблица
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 
      
) 
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 
	  
order by c1.CarNumber

2 таблица
SELECT * FROM FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1)
3 таблица
select * from R_OS_OWNERS


Павел, это выборка. А мне бы хотелось посмотреть как они созданы и заполнены данными.
т.е. CREATE TABLE R_OS_OWNERS(...)

И несколько простых инсертов в эти таблицы.
17 май 13, 11:15    [14310119]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
К сожалению не могу это предоставить, могу только в виде текста для примера... :(
17 май 13, 11:24    [14310199]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
К сожалению не могу это предоставить, могу только в виде текста для примера... :(

На ум первое, что пришло создать представление из 2х таблиц (2 и 3), чтобы был и IDшник, и дата начала периода, и дата конца периода, и актуальность, а затем вытащить то, что надо удалить..

CREATE VIEW v_ForPavel AS
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual]
FROM
Table2 t2 JOIN Table3 t3 ON
t2.DATA=t3.db AND t2.ID_OS=t3.carnumber
GO

/*Проверьте сначала, выдаст ли оно правильный ответ, затем можно запустить удаление, если все ОК*/
SELECT *
FROM table1 t1 LEFT JOIN v_ForPavel v ON
v.ID_OS=t1.carnumber /*Или как там у вас это поле называется*/
AND
t1.Data>=v.Data AND t1.Data<=v.de 
17 май 13, 11:45    [14310406]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Или через CTE можно попробовать

[SRC SQL]WITH v_ForPavel AS (
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual]
FROM
Table2 t2 JOIN Table3 t3 ON
t2.DATA=t3.db AND t2.ID_OS=t3.carnumber)

/*Проверьте сначала, выдаст ли оно правильный ответ, затем можно запустить удаление, если все ОК*/
SELECT *
FROM table1 t1 LEFT JOIN v_ForPavel v ON
v.ID_OS=t1.carnumber /*Или как там у вас это поле называется*/
AND
t1.Data>=v.Data AND t1.Data<=v.de [/SQL]
17 май 13, 11:46    [14310415]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
WITH v_ForPavel AS (
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual]
FROM
Table2 t2 JOIN Table3 t3 ON
t2.DATA=t3.db AND t2.ID_OS=t3.carnumber)

/*Проверьте сначала, выдаст ли оно правильный ответ, затем можно запустить удаление, если все ОК*/
SELECT *
FROM table1 t1 LEFT JOIN v_ForPavel v ON
v.ID_OS=t1.carnumber /*Или как там у вас это поле называется*/
AND
t1.Data>=v.Data AND t1.Data<=v.de 


Блин, опять с тегами запутался)
17 май 13, 11:46    [14310420]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Честно говоря ниче не понял =((( как в мою конструкцию впихнуть(
17 май 13, 14:11    [14311889]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
У вас задача выбрать все поля из таблицы один, где дата не актуальная, так?
Вот этот запрос это и делает. Или он не работает? Если надо удалить то вместо SELECT ... FROM пишите DELETE
17 май 13, 14:13    [14311906]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
PavelAA
К сожалению не могу это предоставить, могу только в виде текста для примера... :(

Почему не можете? Что этому препятствует?
17 май 13, 14:31    [14312038]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сергей Викт.
У вас задача выбрать все поля из таблицы один, где дата не актуальная, так?
Вот этот запрос это и делает. Или он не работает? Если надо удалить то вместо SELECT ... FROM пишите DELETE


В принципе да, только не удалить, не отображать))) удалять ничего не надо) Надо чтобы в первом запросе показывались только актуальные вагоны, проверяя по полю из первого запроса. Ниже же 2 запроса которые можно использовать для первого, как вставить вашу конструкцию в первый запрос?)
17 май 13, 14:33    [14312057]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Сергей Викт.
У вас задача выбрать все поля из таблицы один, где дата не актуальная, так?
Вот этот запрос это и делает. Или он не работает? Если надо удалить то вместо SELECT ... FROM пишите DELETE


В принципе да, только не удалить, не отображать))) удалять ничего не надо) Надо чтобы в первом запросе показывались только актуальные вагоны, проверяя по полю из первого запроса. Ниже же 2 запроса которые можно использовать для первого, как вставить вашу конструкцию в первый запрос?)

with NEWCTE 
(
/*тут вставляете и выбираете ту часть, которая джойнит таблицы*/
SELECT t2.ID_OS as ID_OS,t2.Data as [Data] ,t3.de as [de],t2.Is_Actual as [Is_Actual]
FROM
Table2 t2 JOIN Table3 t3 ON
t2.DATA=t3.db AND t2.ID_OS=t3.carnumber
/*Ну там переделываете под те поля и таблицы, которые у вас есть*/
),
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 /*тут делаете джоин по ID с NEWCTE */qStation q1 on IDSourceSt = q1.ID
     inner join qStation q2 on IDDestSt = q2 .ID
   where SendDate between '20130101'and '20130403' 
/*PЗдесь добавляете условие: t1.Data>=v.Data AND t1.Data<=v.de 
*/
     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 
  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


Просто вы не даёте реальной структуры, и как переложить с table1, table2 и table3 на реальные данные это уже ваша задача.
17 май 13, 14:47    [14312201]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
К сожалению ничего не получается, но все равно спасибо)
17 май 13, 15:15    [14312422]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

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

не за что. Просто была бы структура таблиц и какие-то тест данные, то можно было бы со 100% уверенностью вам написать что делать. А так, только в качестве примера.

Glory
6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения:
- скрипты создания таблиц;
- скрипты заполнения этих таблиц тестовыми данными;
- описание желаемого результата на примере тестовых данных.
(эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность)
Подумайте также над тем, чтобы описать решаемую Вами задачу целиком. Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым. Например, вместо вопроса "Как добавить несколько полей в системную таблицу sysusers?" лучше спросить "Как мне хранить дополнительную информацию, привязанную к пользователю бд? Можно ли для этого использовать системную таблицу sysusers?"

///////

10. Этот форум добровольный. Никто не обязан здесь Вам ничем. Все ответы даются добровольно. Подначивания типа: "ну что видать нет тут никаких профи" и "а вот слабо вам гуры" не приветствуются. Жалобы вида "я бедный студент, завтра зачет, а ничего не готово" и "ну что вам лень что ли написать полный запрос" - тоже. Основная цель форума - дать Вам рекомендации как Вам решить Вашу проблему. Никто не обязан делать Вашу работу за Вас.
17 май 13, 15:28    [14312522]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Я могу только пример привести) не уверен на сколько это то. Таблицы не я делал, они были...

2 таблица и ее результат
SELECT * FROM FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) where carnumber = 50024280
db de carnumber
2013-01-21 18:00:00.000 2013-02-11 18:00:00.000 50024280
2013-02-11 18:00:00.000 2013-03-06 18:00:01.000 50024280
2013-03-06 18:00:01.000 2013-04-23 18:00:00.000 50024280
2013-04-23 18:00:00.000 2013-05-20 09:32:23.617 50024280

3 таблица и ее результат
select * from R_OS_OWNERS where ID_OS = 50024280
ID_OS Data Is_Actual
50024280 2013-01-21 18:00:00.000 1
50024280 2013-02-11 18:00:00.000 0
50024280 2013-03-06 18:00:01.000 1
50024280 2013-04-23 18:00:00.000 0

Мой запрос! И вот здесь в условии надо дописать, Что если SenDate находится в промежутке который IS_Actual = 1, тогда показываем, иначе нет. Я привел пример на 1 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 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

order by c1.CarNumber

Результат моего запроса
CarNumber SendDate
50024280 2013-03-05 15:53:00.000
20 май 13, 09:48    [14319281]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
iap
Member

Откуда: Москва
Сообщений: 47066
PavelAA
Я могу только пример привести) не уверен на сколько это то. Таблицы не я делал, они были...
Не могу понять, что мешает получить текст запроса создания таблицы
в Management Studio и скопипастить его сюда?
20 май 13, 09:51    [14319296]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
iap
PavelAA
Я могу только пример привести) не уверен на сколько это то. Таблицы не я делал, они были...
Не могу понять, что мешает получить текст запроса создания таблицы
в Management Studio и скопипастить его сюда?


Подскажите пожалуйста как мне посмотреть SQL код уже созданной на сервере таблицы.
20 май 13, 10:14    [14319417]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Гость333
Member

Откуда:
Сообщений: 3683
PavelAA
как мне посмотреть SQL код уже созданной на сервере таблицы.

В Management Studio в дереве объектов находите нужную таблицу — правый тапок — Script Table as — CREATE To.
20 май 13, 10:25    [14319480]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Гость333
PavelAA
как мне посмотреть SQL код уже созданной на сервере таблицы.

В Management Studio в дереве объектов находите нужную таблицу — правый тапок — Script Table as — CREATE To.


Спасибо)

Что касается таблиц тут дохрена кода, не думаю что это поможет :( Я вроде написал примерчик( Простите, если не по правилам(
20 май 13, 10:32    [14319514]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Прописал вот так

select  * from R_OS_OWNERS 
inner join FA.ROSOwnersInterval('01.01.2000', GETDATE(), -1) on carnumber = ID_OS
where  IS_ACTUAL = 1 and ID_OS = 54619283 and DATA between db and de


Вроде отбирает промежутки, как теперь связать с моим запросом, ведь может быть актуально 2,3 и более строк.
20 май 13, 14:11    [14321183]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Не, не правильно(((
20 май 13, 14:29    [14321300]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Ребят, вопрос актуален, сегодня последний день :( Помогите пожалуйста(((
21 май 13, 09:15    [14324402]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
PavelAA
Гость333
пропущено...

В Management Studio в дереве объектов находите нужную таблицу — правый тапок — Script Table as — CREATE To.



Что касается таблиц тут дохрена кода, не думаю что это поможет :( Я вроде написал примерчик( Простите, если не по правилам(


Павел, если вы хотите помощи, то сделайте, что вас просят. Уже 2 человека попросили предоставить код создания таблиц, а вы всё шифруетесь... Поможет, не поможет - это уже наша проблема. Раз просят люди, значит не просто так. Не хотите, не надо. Просто потом не обижайтесь, что всем помогли, а Вам не смогли.

P.S. Извините за грубость, но правда это уже ни в какие ворота не лезет!
21 май 13, 09:29    [14324454]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Glory
Member

Откуда:
Сообщений: 104751
PavelAA
Ребят, вопрос актуален, сегодня последний день :( Помогите пожалуйста(((

Ну вы приемщикам тоже покажите скриншоты. Они же не глупые люди, поймут наверное, что там откуда надо смотреть.
21 май 13, 09:32    [14324460]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
PavelAA
Member

Откуда:
Сообщений: 121
Сергей Викт.
PavelAA
пропущено...



Что касается таблиц тут дохрена кода, не думаю что это поможет :( Я вроде написал примерчик( Простите, если не по правилам(


Павел, если вы хотите помощи, то сделайте, что вас просят. Уже 2 человека попросили предоставить код создания таблиц, а вы всё шифруетесь... Поможет, не поможет - это уже наша проблема. Раз просят люди, значит не просто так. Не хотите, не надо. Просто потом не обижайтесь, что всем помогли, а Вам не смогли.

P.S. Извините за грубость, но правда это уже ни в какие ворота не лезет!


CREATE TABLE [dbo].[R_OS_OWNERS](
	[AID] [int] IDENTITY(1,1) NOT NULL,
	[ID_OS] [int] NOT NULL,
	[ID_DOCUMENT] [int] NOT NULL,
	[DATA] [datetime] NOT NULL,
	[ID_OWNER] [int] NOT NULL,
	[ID_BELONG] [int] NOT NULL,
	[ID_MANAGER] [int] NULL,
	[IS_ACTUAL] [int] NULL,
	[ID_ROW] [int] NULL,
	[ID_AGR] [int] NULL,
	[CarTypeId] [int] NULL,
	[ISVSP] [int] NULL,
 CONSTRAINT [PK_R_OS_OWNERS] PRIMARY KEY CLUSTERED 
(
	[AID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [IX_R_OS_OWNERS] UNIQUE NONCLUSTERED 
(
	[ID_DOCUMENT] ASC,
	[ID_ROW] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
21 май 13, 09:46    [14324521]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

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

Код можно посмотреть?:)
21 май 13, 09:58    [14324589]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две колонки с условием  [new]
Сергей Викт.
Member

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

там и поля таблиц другие и всё. Либо опишите ПОЛНОСТЬЮ задачу, какие есть таблицы, скрипты их создания, несколько строк с данные и то, что вы хотите получить на выходе. А то получается: мне нужно купить 2 банана, но машина едет быстро на восток....
21 май 13, 10:04    [14324636]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить