Как вычесть отрицательные десятичные дроби в Sql Server с помощью Insert Into

#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.002500

2. Смотрите мой последний комментарий ниже к ответу @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