У меня 4 магазина на разных уровнях. (Магазин A, Магазин B, Магазин C, Магазин D). В магазинах хранятся товары. (Item1, Item2, Item3, Item4 и Item5).

У меня есть 3 таблицы (таблица предметов, таблица магазина, Таблица отслеживания) и 1 запрос ( запрос Store_rec для Item2 в магазине B).

В таблице отслеживания есть столбцы (ID, T_Date, Item_ID, Item_Name, Store_From, Store_To, Amount, Remark).

Таблица запросов Store_rec предназначена для проверки изменений элемента в магазине (в моем случае - элемента 2 в магазине B). Он имеет 5 столбцов (SrNo, T_Date, Location_To / From (от B к другим / от других к B), Received (увеличение баланса B) и Dispatched (уменьшение баланса B).

Мои проблемы:

  1. Я не могу отсортировать SrNo в порядке возрастания, не влияя на номер строки T_Date.

  2. Я хочу добавить столбец баланса в запрос Store_rec, как показано на рисунке. (Баланс = Предыдущий баланс + Получено - Отправлено).

Я искал в Google, читал на форумах, в руководствах и примерах, но все еще не могу решить свою проблему.

Пожалуйста помоги.

SELECT (
        SELECT COUNT(aa.[ID]) + 1
        FROM Tracking AS aa
        WHERE (
                t.[Store_From] = "Store B"
                OR t.[Store_To] = "Store B"
                )
            AND aa.[ID] < t.[ID]
        ) AS SrNo
    ,t.T_Date
    ,IIf(t.[Store_To] = "Store B", t.[Store_From], t.[Store_To]) AS [Location_To/From]
    ,IIf(t.[Store_To] = "Store B", t.[Amount], 0) AS Received
    ,IIf(t.[Store_From] = "Store B", t.[Amount], 0) AS Dispatched
FROM Tracking AS t
WHERE (
        t.[Store_From] = "Store B"
        OR t.[Store_To] = "Store B"
        )
    AND t.[Item_Name] = "Item 2"
ORDER BY t.[T_Date];
2
Khant Maung Maung 8 Сен 2016 в 12:13

3 ответа

Лучший ответ
select  T1.id ,IIF(Store_From = 'Store B',Store_To, Store_From) ,IIF(Store_To = 'Store B',0, Amount) AS Dispatched, IIF(Store_From = 'Store B',0, Amount) AS Received,SUM(T.Received) AS RemainingBal
  From track  as T1

left join (

select  id,(-IIF(Store_To = 'Store B',0, Amount) + IIF(Store_From = 'Store B',0, Amount) ) AS Received
  From track 

) as  T ON T.id <= T1.id

WHERE   Item_Id = 'Item_2'
        AND ( Store_From = 'Store B'
              OR Store_To = 'Store B'
            )

GROUP BY 
        T1.Store_From ,
        T1.Store_To,T1.id,Amount
        ORDER BY T1.id
0
Bhavdip Tala 9 Сен 2016 в 06:10

Спасибо, что помогли мне. Я отредактировал некоторые моменты в приведенных выше кодах. Код следующий

SELECT T1.TDate,IIF(T1.Store_From = 'Store B',T1.Store_To, T1.Store_From) AS Location, IIF(T1.Store_From = 'Store B',0, T1.Amount) AS Received, IIF(T1.Store_To = 'Store B',0, T1.Amount) AS Dispatched, SUM(T.Received) AS Balance FROM Tracking AS T1 LEFT JOIN (SELECT aa.id, aa.TDate, (-IIF(aa.Store_To = 'Store B',0, aa.Amount) + IIF(aa.Store_From = 'Store B',0, aa.Amount) ) AS Received FROM Tracking AS aa WHERE aa.Item_Name = 'Item 2')  AS T ON T.id <= T1.id WHERE Item_Name = 'Item 2' AND (Store_From = 'Store B' OR Store_To = 'Store B') GROUP BY T1.TDate,T1.Store_From, T1.Store_To, T1.id, Amount ORDER BY T1.TDate;
0
Khant Maung Maung 9 Сен 2016 в 11:20
SELECT  id ,
        CASE WHEN Store_From = 'Store B' THEN Store_To
             ELSE Store_From
        END AS Location_To ,
        CASE WHEN Store_To = 'Store B' THEN 0
             ELSE Amount
        END AS Dispatched ,
        CASE WHEN Store_From = 'Store B' THEN 0
             ELSE Amount


        END AS Received
INTO    #Tmp
FROM    dbo.Tracking
WHERE   Item_Id = 'Item_2'
        AND ( Store_From = 'Store B'
              OR Store_To = 'Store B'
            )

SELECT  T1.Location_To ,       
        T1.Received ,T1.Dispatched ,
        SUM(T.Dispatched) AS RemainingBal
FROM    #Tmp AS T1
        LEFT JOIN ( SELECT  ISNULL(( -CAST(Dispatched AS INT) + CAST(Received AS INT) ),
                                   0) AS Dispatched ,
                            id
                    FROM    #Tmp
                  ) AS T ON T.id <= T1.id
GROUP BY T1.Location_To ,
        T1.Dispatched ,
        T1.Received
0
Bhavdip Tala 8 Сен 2016 в 12:35