Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.01;
Скачать: CL | DM;

Вниз

Как составить 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
6-267
Reals
2002-01-17 15:38
2002.04.01
В локальной сети, нужно найти только сервер(а) (его имя).


1-165
TDM
2002-03-18 12:04
2002.04.01
Сортировка в Excel


1-150
СиндяшкинДВ
2002-03-21 07:13
2002.04.01
Поддержка DWG


6-274
Krok
2002-01-15 02:34
2002.04.01
Как реализовать СЕТЕВОЕ ОКРУЖЕНИЕ


1-229
masterdim
2002-03-20 15:20
2002.04.01
изменение свойства у компонента TButton