Jag sitter med en Access databas och har ett problem. Hej. Så långt har jag också kommit, problemet är att det är fler månader på ett år. Jag har provat skala av (InDate) med year och month oc ställt grupperings kriterierna på de. Men eftersom jag har fler material per månad så "drar" jag ut resultatet så att det blir fler av samma "månad" Det här kanske kan vara något för dig. Jo det har du rätt i . Det underlättar nog om du set tabellerna. Nu har jag även gjort lite modifikationer. Tabellerna ser ut som följer: Om du anväbder Access kan du göra en korsfråga: Tack så mycket precis det jag letade efter.Summering från olika tabeller
Jag har lagt upp en tabell för att hålla koll på inkommand transporter.
I denna tabell har jag ett löpande ID nummer för transporterna (Rowid)och ett Datum fält för inkommande datum(InDate).
Nu sitter jag här och försöker räkna antal transporter per månad.
Om jag använder mig av count får jag summan av alla transporter i hela tabellen.
Men jag vill basera räkningen på datum fältet närmare bestämt räkna per månad.
Jag har även en material tabell kopplat till Transport tabellen där ett material ID är kopplingen (MID). MID är inte ett löpnummer utan inmatade serier beroende vilken typ av material det är. Om jag nu skulle vilja koppla ihop detta till första lösningen tillsammans med en kolumn i Transport som innehåller vikten på varje transport hur gör jag då?
När jag grupperar och därefter kopplar ihop med material tabellen så "drar " jag ju ut svaret på SQL frågan........
Det slutgiltiga resultatet ska bli att jag får fram hur många transporter som varit per/månad plus summa vikten på all material under denna period. Förutom den material serie som har en "2" som första siffra.Sv: Summering från olika tabeller
Om jag förstått dig rätt, ungefär så här kan det se ut :
SELECT COUNT(transport.rowid), SUM(material.vikt)
FROM transport, material
WHERE transport.mid = material.mid
AND material.serie <> 2
AND transport.indate >= '2003-03-01' AND transport.indate <= '2003-03-31'
Osäker på hur datum hanteras i Access, finns säkert någon bra funktion.
/UffeSv: Summering från olika tabeller
Jag vill ha med andra ord en månadsvis summering av transporter där inte material(MID) är två inräknat.....
Tack på förhand och efterhandSv: Summering från olika tabeller
Sv: Summering från olika tabeller
SELECT Format(transport.InDate,"yyyy-mm") AS TpMonth, Count(transport.RowId) AS Antal, Sum(material.Vikt) AS TotVikt
FROM material INNER JOIN transport ON material.MID = transport.Mid
GROUP BY Format(transport.InDate,"yyyy-mm"), material.MID
HAVING (((material.MID)<>2));
Om inte så kan det underlätta med lite exempeldata på innehållet i dina tabeller transport och material och hur du då vill att det ska presenteras.
//
JanneSv: Summering från olika tabeller
MATERIAL
------------
RowID (rad id)
Kod (Materialets Kod i serier med grupperat efter siffror t ex 101,102,103 nästa 201,202,203 o.s.v.)
Name (Materialets Namn)
STOCK_IN
--------------
RowID (rad id)
MID (Koppling till MATERIAL.RowID)
TIID (Koppling till TRANSPORT.RowID)
InDate (Datum då posten registreras i lagret) ex2001-12-01
Weight (Vikten på den posten)
TRANSPORT
---------------
RowID (rad id)
InDate (In datum för inkommande transporter) ex2001-12-01
Det jag har problem med att få ut är detta (det ska bli en sammanställning)
1. Allt ska baseras på hela månader (2001-12, 2002-01, 2002-02 o.s.v.)
2. Jag vill veta antal inkommande transporter per/mån (count(TRANSPORT.RowID)????) månaden som det beräknas på är TRANSPORT.InDate
3. Jag vill veta vikten per material serie per månad t ex 2001-12 serie 100 (MATERIAL.kod) 1200 kg (sum(STOCK_IN.weight)????) månad för månad per material serie.........???????? månaden som detta baseras på är STOCK_IN.InDate.
ex:
Månad Transporter Serie100 Serie 200 Serie 300
--------- ------------- ----------- ----------- ------------
2002-01 5st 200kg 450kg 100kg
2002-02 8st 50kg 650kg 78kg
2002-03 21st 1200kg 1200kg 123kg
Jag vore mycket tacksamm om någon kunde hjälpa mig..........
Sv: Summering från olika tabeller
TRANSFORM Sum(STOCK_IN.Weight)
SELECT Year([TRANSPORT].[InDate]) AS År, Month([TRANSPORT].[InDate]) AS Månad, Count(*) AS Antal
FROM TRANSPORT RIGHT JOIN (MATERIAL RIGHT JOIN STOCK_IN ON MATERIAL.RowID = STOCK_IN.MID) ON TRANSPORT.RowID = STOCK_IN.TIID
GROUP BY Year([TRANSPORT].[InDate]), Month([TRANSPORT].[InDate])
PIVOT ([MATERIAL].[Kod]\100)*100;
Jag skulle skapa en grupptabell och ge tabellerna fäljande namn:
Tabell: Groups
Fält: GroupId (Räknare)
Fält: GroupName (Text)
Tabell: Material
Fält: MaterialId (Räknare)
Fält: MaterialGroup (Long) -> Groups.GroupId
Fält: MaterialNumber (Long)
Fält: MaterialName (Text)
Tabell: Stock
Fält: StockID (Räknare)
Fält: StockMaterial (Long) -> Material.MaterialId
Fält: StockTransport (Long) -> Transports.TransportId
Fält: StockInDate (Date/Time)
Fält: StockWeight (Double eller Long)
Tabell: Transports
Fält: TransportId (Räknare)
Fält: InDate (Date/Time)
Du får då unika fältnamn. Vilket underlättar nä rman skriver fråger.
Frågan är om du behöver en in- och ut-tabell för Stock. Det borde ju räcka med posetiva för in och neghativa värden för ut.Sv: Summering från olika tabeller
Men jag får det inte riktigt att funka som jag vill MÀTERIAL.kod är text i databasen och är ju som sagt uppbyggt i serier med en bokstav på slut ex 102a,103b,102b osv...
I Pivotfältet skalade jag av MATERIAL.kod med mid funktionen istället. ALLT frid och fröjd så långt......
Men om jag skalar av serierna så blir det kvar en serie från 1 till 9 och dessa skulle jag villja ha grupperat i privot fältet i tre varianter:
1. Avskalad serie med MATERIAL.kod = 2
2. Avskalad serie med MATERIAL.kod = 3
3. Avskalad serie med MATERIAL.kod som är summa av resten m.a.o. 1+4 till 9.
Går det att fixa med denna variant?
Jag håller på och testar men resultatet blir inget bra.