Sitter med ett litet intrikat problem. Jag har gjort en applikation som ska hålla reda på lite mätdata. Inte säker på att jag förstår vad du är ute efter men kan du inte helt sonika lägga in 1..25 i en tabell och sen köra nåt i stil med Du förstod nog rätt. I många miljöer går det som du är inne på att skapa temporära tabeller, fast jag vill bestämt minnas att det inte går att göra i Access (rätta mig gärna om jag har fel, det var ett tag sen jag höll på med Access). Jag vet iofs inte om jag skulle anse en sån lösning vara snyggare heller? Smaken är väl som baken antar jag. Om du vill ha ett fast antal fält så kan du ju göra en CrossQuery:Vettig lösning, skapa data "som inte finns" i access?
För varje mättillfälle så skriver man i lite information, som läggs i tabell "Header". Vid varje mättillfälle mäts ett antal olika mått, "parametrar". De kommer variera med tiden, och ligger i en egen tabell. Under ett tillfälle görs upp till 25 mätningar på dessa parametrar.
Varje sån enskild mätning ligger i en tabell Rows, och har alltså följande utseende:
Header, Parameter, No, Value
Där Header är kopplad till Headertabellen, Parameter till parametertabellen, No ligger i [1, 25], och Value är ett godtyckligt tal.
Nu skulle jag behöva en rapport av detta. Rapporten ska in i ett annat system och måste därför se ut på ett visst sätt. Det ska hamna i Excel först.
I princip är det enkelt; 25 rader för varje header.
Från vänster till höger: varje rad börjar med headerinformationen, följs sen av mätningar för varje parameter.
Jag skulle kunna göra detta helt programmatiskt, men jag kom på vad jag tyckte var en snyggare lösning, genom att gå via SQL. Tanken var då att helt enkelt välja ut alla headers med 25 rader, och sen köra en join med detta mot varje parameter. Då klarar man utan problem att säg, mätning 7 saknas för parameter 5.
Problemet är egentligen att jag inte får ut 25 rader för varje header. Min tanke var att man skulle kunna göra en fultabell:
Fuling (No)
1
2
3
...
25
Och sen köra
SELECT Fuling.No, Header.ID from Fuling, Header
men det ser inte klokt ut. Frågan är alltså, finns det något vettigt sätt att skapa data, typ 1 till 25, i en temptabell eller vad som helst i Access?Sv: Vettig lösning, skapa data "som inte finns" i access?
SELECT h.No, foo, bar
FROM Header h RIGHT OUTER JOIN tabellen_med_ett_till_tjugofem t ON h.No = t.No;
?
Sv:Vettig lösning, skapa data "som inte finns" i access?
Jo, det är ju en möjlighet, men det är så satans fult!
Det var därför jag var ute efter något lite mer elegant...Sv: Vettig lösning, skapa data "som inte finns" i access?
Sv: Vettig lösning, skapa data "som inte finns" i access?
TRANSFORM Last(Header.Value) AS LastOfValue
SELECT Header.Header, Header.Parameter
FROM Header
GROUP BY Header.Header, Header.Parameter
PIVOT Header.[No] in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);