#sql-server #tsql #sql-server-2008
#sql-сервер #tsql #sql-server-2008
Вопрос:
Я пытаюсь написать запрос, который отслеживает историю десятичных значений в 2 таблицах.
Таблица1
PK Num1 D1 D2
1 1 -0.00375 -0.005
2 1 -0.00325
Таблица 2
PK Num1 D1 D2
1 1 -0.00375 -0.0025
2 2 -0.005
Table3 (таблица истории)
Num1 OldD2 NewD2 D2Difference
1 -0.005 -0.0025 0.0000//This is where I am having trouble
Мой запрос добавит 2 значения D2, но не вычтет. Он всегда возвращает 0.00
Вот мой запрос.
BEGIN TRANSACTION
INSERT INTO Table3
SELECT Table1.Num1, Table1.D2, Table2.D2, (Table1.D2 - Table2.D2)
FROM Table1
INNER JOIN Table2 ON Table1.Num1 = Table2.Num1 AND Table1.D1 = Table2.D1
COMMIT
Опять же, я могу добавить к 2 десятичным дробям, но вычитание всегда возвращает 0.00. Я знаю, что мне не хватает деревьев в лесу (или наоборот?).
ПРИМЕЧАНИЕ: все десятичные дроби равны (5,5), а объединения являются результатом таблиц 1 и 2, имеющих уникальное значение D1 для каждого Num1.
Комментарии:
1. Я протестировал ваш запрос с точно такими же значениями и
(Table1.D2 - Table2.D2)
в результате получил -0.0025002. Смотрите мой последний комментарий ниже к ответу @sll. Извините за беспокойство.
Ответ №1:
Поскольку вы выбираете только D1, которые равны в обеих таблицах, операция вычитания вернет 0.00
Просто удалите условие соединения AND Table1.D1 = Table2.D1
РЕДАКТИРОВАТЬ: Примечание
Поскольку вопрос был изменен, мой ответ не очевиден, потому что был изменен первоначальный запрос sql
Комментарии:
1. Проблема в том, что мои 2 таблицы не будут соединены должным образом. Каждый столбец Num1 имеет уникальный D1. Tabl1 D1 = — .00375 и Table2 D1 = -0.00350
2. Но ваше ВНУТРЕННЕЕ условие соединения выбирает только равные T1.D1 и T2.D1, поэтому T1.D1 — T2 — D1 == 0.00
3. Хорошо, дух, я понимаю, что ты говоришь. Однако, если я использую тот же запрос, но вычитаю значения, скажем, из D2 col, произойдет то же самое.
4. Хорошо, предоставьте, пожалуйста
SELECT TOP 10 *
, строки как из T1, так и из T2 и обновите свой вопрос5. Ваше обновление полностью меняет ситуацию, но, к сожалению, для меня не имеет смысла …. потому что SELECT
(-0.005 - (-0.0025))
в любом случае возвращает -0.0025