2016-02-29 4 views
0

* EDIT *SQL - Вычитание значения в столбцах 2 - Добавить новый столбец

Есть исходный код работает в настоящее время, благодаря некоторой помощи от некоторых больших пользователей здесь!

SELECT 
       STOCK.STOCK_CODE As Stock_Code, 
       STOCK.SHORT_DESC As Stock_Description, 
       STOCK.AVAILABILITY As Available, 
       SUM(SORDER_ITEM.QTY_SOLD) As Quantity_Sold, 
       ABS(CAST(STOCK.AVAILABILITY AS INT) - CAST(SORDER_ITEM.QTY_SOLD AS INT)) AS ACTUAL 
FROM 
    STOCK INNER JOIN SORDER_ITEM ON STOCK.STOCK_ID=SORDER_ITEM.STOCK_ID 
GROUP BY SORDER_ITEM.QTY_SOLD, STOCK.STOCK_CODE, STOCK.SHORT_DESC, STOCK.AVAILABILITY 

Я сделал GROUP BY, но данные по-прежнему выходит так:

5000A TShirt 107 28 93 
5000A TShirt 107 21 86 
5000A TShirt 107 14 100 

Однако следует читать:

5000A TShirt - 107 63 44 

SAMPLE DATA * SQL ВОЗВРАЩЕНИЯ:

5000A Tshirt 107 28 93 
5000A Tshirt 107 21 86 
5000A Tshirt 107 14 100 

STOC К

5000A - TSHIRT - 107 

SORDER_ITEM

5000A - TSHIRT - 28 
5000A - TSHIRT - 21 
5000A - TSHIRT - 14 
+0

где-то у вас есть не-цифровой символ в колонке VARCHAR. сначала проверьте свои определения таблиц - тогда, возможно, отсортируйте эти столбцы DESC, чтобы искать забавные символы. – Randy

+1

Не хранить номера в строковых столбцах. Они подвержены ошибкам. –

ответ

0

Как ясно указано в сообщении, одно из полей, вычитаемых в varchar. Попробуйте приведения его в целое

SELECT 
       STOCK.STOCK_CODE As Stock_Code, 
       STOCK.SHORT_DESC As Stock_Description, 
       STOCK.AVAILABILITY As Available, 
       SORDER_ITEM.QTY_SOLD As Quantity_Sold, 
       ABS(CAST(STOCK.AVAILABILITY AS INT) - CAST(SORDER_ITEM.QTY_SOLD AS INT)) AS ACTUAL 
FROM 
    STOCK INNER JOIN SORDER_ITEM ON STOCK.STOCK_ID=SORDER_ITEM.STOCK_ID 

Если он все еще оленья кожа исправить вашу проблему, может быть плохие данные в ваших полях т.е. некоторого алфавита или специального символа. Попробуйте сортировать по убыванию и проверить, все ли правильные номера в поле.

EDIT - Используйте сумма для поля Наличие слишком

SELECT 
       STOCK.STOCK_CODE As Stock_Code, 
       STOCK.SHORT_DESC As Stock_Description, 
       SUM(STOCK.AVAILABILITY) As Available, 
       SUM(SORDER_ITEM.QTY_SOLD) As Quantity_Sold, 
       ABS(CAST(SUM(STOCK.AVAILABILITY) AS INT) - CAST(SUM(SORDER_ITEM.QTY_SOLD) AS INT)) AS ACTUAL 
FROM 
    STOCK INNER JOIN SORDER_ITEM ON STOCK.STOCK_ID=SORDER_ITEM.STOCK_ID 
GROUP BY STOCK.STOCK_CODE, STOCK.SHORT_DESC 
+0

Добро пожаловать, если проблема решена, закройте вопрос, отметив его как ответ. – Chendur

+0

Спасибо, это похоже на работу, просто проверяя данные сейчас! – MHarkess

+0

Итак, теперь я выяснил, почему данные не складывались. Существует множество QTY_SOLD, которые должны быть добавлены вместе, и минус из одного поля STOCK_AVAILABLE. Это делается с помощью GROUP BY? – MHarkess

0

Когда вы пишете:

STOCK.AVAILABILITY - SORDER_ITEM.QTY_SOLD 

один из них не является числовым типом. Вам нужно преобразовать его в числовой тип, прежде чем вы сможете использовать его в арифметической репрессии. См. Логику преобразования здесь: https://msdn.microsoft.com/en-us/library/ms187928.aspx?f=255&MSPPError=-2147217396

Смежные вопросы