Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как составить SQL запрос [D5, D6, MSSQL]


AndrewK ©   (2002-03-05 15:35:00) 

Здравствуйте.

Есть две таблицы

Table1
IDR int
Product_ID int
Order_ID int
Count int

и

Table2
IDR int
Product_ID int
Order_ID int
Count int

В таблицу Table1 заносится информация пользователями. Таблица используется для хранения перечней в заказе (ID записи заказа храниться в поле Order_ID). Есть главный менеджер, который должен знать какие изменения произошли в заявках за время его отсутствия. Для сохранения того, что он посмотрел использую таблицу Table2. Для этого просто переношу всю информацию из Table1 в Table2. Стоит задача сравнить две эти таблицы между собой и вывести отчет сколько продуктов было добавлено, сколько изменено, сколько удалено.

Т.е. получить примерно вот это:

Продукт Было Стало Разница

Продукт 1 0 2 2
Продукт 2 3 1 -2
Продукт 1 5 0 -5

Бьюсь над этим уже дня четыре, ничего не получается. А запрос вроде бы должен быть простым.


DPetrovich   (2002-03-07 16:17:00) [1]

to AndrewK © :
Думаю
select
InBuffer, InFact, (InFact-InBuffer) as Diff
from
(
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table1 t1
full join table2 t2 on t2.Order_ID = t1.Order_ID
union
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table2 t2
full join table1 t1 on t2.Order_ID = t1.Order_ID
) ResTable

должно работать, хотя я написал бы так...

(select
isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact,
(isnull(t2.Count, 0) - isnull(t1.Count, 0)) as Diff
from
table1 t1
left join table2 t2 on t2.Order_ID = t1.Order_ID)
union
(select
isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact,
(isnull(t2.Count, 0) - isnull(t1.Count, 0)) as Diff
from
table2 t2
left join table1 t1 on t2.Order_ID = t1.Order_ID)


MetallAdm   (2002-03-07 16:05:00) [2]

А Как Вам Такой Пример ??

У меня сдеся две таблички я для пробы сделал
(я не стал на конкретном примере енто делать)

t1 (Table)
t int

t2 (Table)
t int

туда запихал разные числа

declare @t1 int
declare @t2 int

SET NOCOUNT ON
declare test_cur cursor for
select a.t,b.t from t1 a,t2 b
open test_cur
fetch next from test_cur into @t1,@t2
while (@@fetch_status <> -1)
begin
if (@@fetch_status <> -2)
begin
Select @t1 as "Было" ,@t2 as "Стало " ,@t1-@t2 as "разница"
end
fetch next from test_cur into @t1,@t2
end
close test_cur
deallocate test_cur

но скорее енти данные придется заносить в какуюто табличку

а оттуда выводить

попробуй опираясь
на енто ведь, курсоры довольно удобная вещь :))

Думаю проше моно было но вот непонятно
в каих полях "Было" "Стало" "Продукт"

IDR int
Product_ID int
Order_ID int
Count int -- Или здеся сумма из которой вы хотите получить разницу ??







boogier   (2002-03-07 16:01:00) [3]

не мож б


AndrewK   (2002-03-07 14:51:00) [4]

2 boogier> Тож не работает


boogier   (2002-03-07 11:14:00) [5]

select * from table1 where not exists(select Order_id from table2 where table1.order_id= table2.order_id)


AndrewK   (2002-03-06 19:09:00) [6]

Запросы не работают.

Более менее что-то рабочее получилось что-то вроде этого. Однако и он тоже не всегда корректно работает иногда. Чувствую, что я что-то намудрил, но проще не получается.

select
InBuffer, InFact, (InFact-InBuffer) as Diff
from
(
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table1 t1
full join table2 t2 on t2.Order_ID = t1.Order_ID
union
select isnull(t2.Count, 0) as InBuffer,
isnull(t1.Count, 0) as InFact
from table2 t2
full join table1 t1 on t2.Order_ID = t1.Order_ID
) ResTable


Bachin   (2002-03-05 19:36:00) [7]

2Johnmen:
не совсем... скорее

SELECT B.Count,A.Count,A.Count-B.Count AS Diff
FROM Table2 B
OUTER JOIN Table1 A ON B.IDR=A.IDR
подзабыл MSSQL т проверить негде, но идея в связи NULL или 1


Johnmen   (2002-03-05 15:47:00) [8]

SELECT B.Count,A.Count,A.Count-B.Count AS Diff FROM Table1 A
JOIN Table2 B ON B.Order_ID=A.Order_ID

По-моему так...


Наверх

Титульная страница Поиск, карта сайта Написать письмо