Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
ВнизКак составить SQL запрос Найти похожие ветки
← →
AndrewK (2002-03-05 15:35) [0]Здравствуйте.
Есть две таблицы
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
Бьюсь над этим уже дня четыре, ничего не получается. А запрос вроде бы должен быть простым.
← →
Johnmen (2002-03-05 15:47) [1]SELECT B.Count,A.Count,A.Count-B.Count AS Diff FROM Table1 A
JOIN Table2 B ON B.Order_ID=A.Order_ID
По-моему так...
← →
Bachin (2002-03-05 19:36) [2]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
← →
AndrewK (2002-03-06 19:09) [3]Запросы не работают.
Более менее что-то рабочее получилось что-то вроде этого. Однако и он тоже не всегда корректно работает иногда. Чувствую, что я что-то намудрил, но проще не получается.
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
← →
boogier (2002-03-07 11:14) [4]select * from table1 where not exists(select Order_id from table2 where table1.order_id= table2.order_id)
← →
AndrewK (2002-03-07 14:51) [5]2 boogier> Тож не работает
← →
boogier (2002-03-07 16:01) [6]не мож б
← →
MetallAdm (2002-03-07 16:05) [7]А Как Вам Такой Пример ??
У меня сдеся две таблички я для пробы сделал
(я не стал на конкретном примере енто делать)
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 -- Или здеся сумма из которой вы хотите получить разницу ??
← →
DPetrovich (2002-03-07 16:17) [8]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)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c