2016-09-08 4 views
2

Ich habe 4 Speicher auf verschiedenen Ebenen. (Speicher A, Speicher B, Speicher C, Speicher D). Die Geschäfte halten die Gegenstände. (Artikel 1, Artikel 2, Artikel 3, Artikel 4 und Artikel 5).Schwierigkeiten beim Abrufen des vorherigen Abfragedatensatzes

Ich habe 3 Tabellen (Artikel-Tabelle, speichern Tabelle, Tracking Table) und 1 Abfrage ( Store_rec query for Item2 in Store B).

Tracking-Tabelle hat Spalten (ID, T_Datum, Artikel_ID, Artikel_Name, Store_From, Store_To, Menge, Bemerkung).

Store_rec Abfragetabelle ist die Überprüfung der Änderungen eines Artikels in einem Store (in meinem Fall - Artikel 2 in Store B). Es hat 5 Spalten (SrNo, T_Date, Location_To/Aus (von B zu anderen/von anderen B), Empfangene (B Balance zu erhöhen) und Versand (B Balance Abnahme)

Meine Probleme sind:.

  1. I SrNo nicht sortieren können, um ohne Beeinträchtigung der Zeilennummer T_Date

  2. ich eine Balance Spalte in Store_rec Abfrage hinzufügen möchten, wie im Bild gezeigt (Balance = Zurück Balance + Empfangene in steigend -.. Versand)

Ich suchte in Google, las in Foren, Tutorials und Beispielen, kann aber immer noch nicht mein Problem lösen.

Bitte helfen.

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]; 

Antwort

0
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
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

bekam ich die Fehlermeldung "Syntaxfehler (fehlender Operator) in Abfrageausdruck 'CASE WHEN Store_From = 'Shop B' THEN Store_To ELSE Store_From END AS Location_To'". Also habe ich VBA-Code versucht. Tmp-Abfrage erstellen ist OK. Aber ich habe Fehlermeldung in VBA-Code, um 'Store_rec Abfrage' zu erstellen. Fehler in "" SELECT T1.Location_To, T1.Received, T1.Dispatched, SUM (T.Dispatched) als RemainingBal FROM Tmp AS T1 LINKER JOIN (SELECT ISNULL ((-CAST (ausgelöst als INT) + CAST (empfangen AS INT)), 0) AS Dispatcht, ID FROM Tmp) AS T auf T.id <= T1.id GROUP BY T1.Location_To, T1.Dispatched, T1.Received "' –

0

Ihr danken mir geholfen. Ich habe einige Punkte in den oben angegebenen Codes bearbeitet. Der Code ist wie folgt

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; 
Verwandte Themen