2015-02-13 2 views
0

У меня есть две таблицы Items и Transactions. В таблице элементов перечислены все элементы. В таблице транзакций это то, где конкретный сотрудник может запрашивать предмет в зависимости от количества, которое он запросил.Как использовать объединения и суммы() в запросе SQL Server

Как использовать объединения для объединения данных из двух таблиц, которые будут вычислять для баланса количества каждого элемента?

Примечание: (Количество баланс = Количество - TR_Qty)

ITEMS стол:

| ID | ITEM | UNIT | QUANTITY | PRICE | 
    | 1 | Perfume | btl. | 50  | 200.00 | 
    | 2 | Battery | pc. | 100  | 25.00 | 
    | 3 | Milk | can | 250  | 70.00 | 
    | 4 | Soap | pack | 400  | 150.00 | 

TRANSACTIONS стол:

| ID | ITEM_ID | TR_QTY | REQUSETOR | PROCESSOR | Date  |Time |  
    | 1 | 1  | 20 | A. Jordan | K. Koslav | 12-22-2014 |09:00| 
    | 2 | 2  |  8 | B. Wilkins | Z. Flores | 12-22-2014 |10:03| 
    | 3 | 3  | 80 | C. Potran | A. Mabag | 12-26-2014 |14:23| 
    | 4 | 3  | 45 | D. Korvak | D. Sanchez | 12-28-2014 |15:33| 
    | 5 | 4  | 22 | C. Carvicci | A. Flux  | 12-31-2014 |16:02| 
    | 6 | 1  | 18 | F. Sansi | N. Mahone | 01-22-2015 |08:45| 
    | 7 | 4  | 14 | Z. Gorai | M. Sucre | 01-30-2015 |16:33| 
    | 8 | 2  |  7 | L. ZOnsey | P. Panchito | 02-11-2015 |17:22| 

Желаемый результат:

| ID | ITEM | QUANITY BALANCE| 
    | 1 | Perfume |  462  | 
    | 2 | Battery |  85   | 
    | 3 | Milk |  125  | 
    | 4 |Soap  |  364  | 

ответ

0

Попробуйте это:

DECLARE @Items TABLE(ID INT, Item NVARCHAR(10), Q INT) 
DECLARE @Transactions TABLE(ID INT, ItemID INT, TQ INT) 

INSERT INTO @Items VALUES 
(1, 'Perfume', 500), 
(2, 'Battery', 100), 
(3, 'Milk', 250), 
(4, 'Soap', 400) 


INSERT INTO @Transactions VALUES 
(1, 1, 20), 
(2, 2, 8), 
(3, 3, 80), 
(4, 3, 45), 
(5, 4, 22), 
(6, 1, 18), 
(7, 4, 14), 
(8, 2, 7) 


SELECT i.ID, i.Item, MAX(i.Q) - ISNULL(SUM(t.TQ), 0) AS Balance 
FROM @Items i 
LEFT JOIN @Transactions t ON t.ItemID = i.ID 
GROUP BY i.ID, i.Item 
ORDER BY i.ID 

Выход:

ID Item Balance 
1 Perfume 462 
2 Battery 85 
3 Milk 125 
4 Soap 364 
0
SELECT ITEM , (SELECT (SUM(TRANSACTIONS.TR_QTY)-ITEMS.TR_QTY) FROM TRANSACTIONS WHERE TRANSACTIONS.ITEM_ID = ITEMS.ID) AS QUANITY BALANCE FROM ITEMS 

Имя поля и имя таблицы, как вы упомянули в запросе (вы должны изменить это, как пространство не является допустимым для поля или таблицы)

+0

Я уверен, что это не действительный t-sql, потому что 'количественный баланс' не будет анализироваться как идентификатор, если он написан так. Я имею в виду, что в середине есть пространство! –

+0

Да, thatsy i metioned «Имя поля и имя таблицы, как вы упомянули в запросе», вы можете изменить имя поля :) – parveen

+0

Что я имею в виду, так это то, что нет смысла указывать пример, который бы никогда не работал. Вы можете изменить его так, чтобы он имел хотя бы половину шанса быть действительным t-sql –

0

Вы можете сделать это, например, с помощью внешних примениться и создания суммы количество в наличии:

select 
    I.ID, 
    I.ITEM, 
    I.QUANTITY - isnull(T.QUANTITY, 0) as BALANCE 
from 
    ITEMS I 
    outer apply (
     select sum(TR_QTY) as QUANTITY 
     from TRANSACTIONS T 
     where T.ITEM_ID = I.ID 
    ) T 
Смежные вопросы