Suche Vorgehensweise

14/01/2009 - 10:10 von Andreas Schmidt | Report spam
Hallo,

ich habe folgende Tabelle:

ID Time ID_Def Wert
1 10:01 21 20
2 10:01 22 50
3 10:01 23 86
4 10:05 21 21
5 10:10 21 22
6 10:10 22 49
7 10:15 22 48
8 10:15 23 87
9 10:20 21 21
10 10:20 22 49
11 10:25 21 22

Daraus soll z.B. werden:
Time Wert_21 Wert_22
10:01 20 50
10:05 21
10:10 22 49
10:15 48
10:20 21 49
10:25 22

wobei ID_Def der Fremdschlüssel einer weiteren Tabelle ist und entsprechend
viele Eintràge hat. Ich will nach einer parametrierbaren Liste von 'ID_Def'
filtern (sowas wie WHERE ID_Def IN (21, 22) und in der Zieltabelle/Abfrage
dann entsprechend unterschiedlich viele Spalten haben.
Wie könnte man das am Besten machen? Kann man die Zieltabelle schon mit
einer SQL-Abfrage/SP erreichen? Oder doch besser auf dem Client in VB? Oder
LINQ oder...???
Die NULL Werte sollen dann noch mit interpolierten Werten aufgefüllt werden.
Hat jemand eine Anregung für mich?

Gruß
Andreas
 

Lesen sie die antworten

#1 Olaf Doschke
15/01/2009 - 09:33 | Warnen spam
Am Client kannst Du 1:1 gezogene Daten natürlich beliebig umschaufeln.
Je nach Datenbank kannst Du bedingungen nutzen.
Interpolation zwischen aufeinanderfolgenden Datensàtzen, noch dazu
unterschiedlich viele Lücken zu interpolieren ist auf jeden Fall
zwecklos per SQL zu machen, SQL arbeitet jeweils auf einem Set
von (zusammengejointen) Feldern und schaut nur mit Tricks a la
Join auf Rownumber in vorige/nachfolgende Sàtze.

Aber Du kannst schon die Felder Wert_21, Wert_22 generieren,
z.B. SQL-Server

Select
Wert_21 Case ID_Def
When 21 Then Wert
Else NULL
End,
Wert_22 Case ID_Def
When 22 Then Wert
Else NULL
End,
...

oder Access und Foxpro

Select ;
IIF(ID_Def!,Wert,NULL) AS Wert_21, ;
IIF(ID_Def",Wert,NULL) AS Wert_22,
...

Simpler wàre es denke ich, zunàchst mal statt
NULL-Sàtze zu erzeugen jeweils Ausschnitte
pro ID_Def zu selektieren, also Einzelne Wertefolgen,
die dann zunàchst mal keine Lücken haben.
Dann kann man weitere Time-Werte ergànzen und
dabei zwischen Vorgànger- und Nachfolger-Time
interpolieren. HAt man anfangs alle Times aber
beliebig große Lücken, muß man erst einmal
die Sàtze finden, wo Werte da sind, bevor
man interpolieren kann.

Also ich würde einfach mehrere Results abrufen

Select Time, Wert From .. Where ID_Def!

Select Time, Wert From .. Where ID_Def"
...

Und dann noch alle Zeiten:

Select Time From ...

Dann jeweils fehlende Zeiten in den Einzelergebnissen
mit interpolierten Werten nachtragen.

Tschüß, Olaf.

Ähnliche fragen