Avatar billede rif1900 Nybegynder
30. november 2007 - 14:41 Der er 8 kommentarer og
1 løsning

Problem med gennemløb af tabeller

Hej eksperter!

Jeg står med en rigtig grimmert af et problem.

Vil lave en funktion som tager tabelnavnet som parameter og så returnerer TOP 5 resulater fra den givne tabel.

Funktionen vil blive kaldt i et gennemløb af en tabel som har en masse tabelnavne hvor de 5 sidste altså skal returneres.

Herefter skal resultaterne så ligges i en ny tabel så dataene kommer til at ligge sådan her:
Tablenavn : Value
Tabel1 : 5.5
Tabel1 : 5.6
Tabel1 : 5.3
Tabel1 : 5.8
Tabel1 : 4.9
Tabel2 : 5.5
Tabel2 : 5.6
Tabel2 : 5.3
Tabel2 : 5.8
Tabel2 : 4.9
osv.

Funktionen jeg har prøvet at lave ser sådan ud:

CREATE FUNCTION dbo.ufn_getLatest5 (
  @TableName NVARCHAR(100)
  )
RETURNS TABLE
AS
RETURN ( SELECT TOP 5 * FROM @TableName WHERE [Fat X] IS NOT NULL ORDER BY [Date] DESC )
GO

Det kan naturligvis ikke lade sig gøre.... Men hvis nogle har et eller andet forslag til (måske endda bare pseudo kode) hvordan man kan løse det her så er i meget velkomne.

Det her er en sand hovedpine.
Avatar billede rif1900 Nybegynder
30. november 2007 - 14:53 #1
det kan lgie siges at den fejlmelding det der giver er: Must declare the variable '@TableName'.

men det er jo bare et udtryk for at det der naturligvis ikke kan lade sig gøre... men kan virkelig bare ikke se en løsning
Avatar billede rif1900 Nybegynder
30. november 2007 - 14:57 #2
Og jeg er ikke ansvarlig for den håbløse tabelstruktur der har skabt det her problem i første omgang.
Avatar billede arne_v Ekspert
30. november 2007 - 15:03 #3
En SP som konstruerer SQL og kalder EXEC og så læser programmet 5 recs og ligger ind i
den anden tabel.

Eller måske helt droppe function/SP og lade app bare fyre SQL af.
Avatar billede rif1900 Nybegynder
30. november 2007 - 15:09 #4
problemet er her Arne at jeg arbejder med nogle SAP rapporteringsværktøjer hvor det ikke er muligt at manipulere med dataene på applikationsniveau. Kan ikke anvende et eneste serverside sprog. Får dataene ud i et javaapplet baseret på den query jeg sender med.

Jeg har leget med Exec og har ikke kunnet få det til at virke.

Hvis du har tid vil jeg være meget taknemmligt for et eksempel hvis du kunne give et.

Mit absolutte slutresultat er at jeg for hver tabel skal have den range de 5 værdier strækker sig over, altså største værdi minus mindste af de fem sidste.

og et andet sted skal jeg have middelværdien af de 5 sidste værdier fra hver tabel.

Det er noget rigtigt hø. Databasen er til noget der hedder QI Analyst hvis du kender det og rapporteringsværktøjet er xMII fra MySap
Avatar billede janus_007 Nybegynder
30. november 2007 - 23:14 #5
Nu skriver du  SELECT TOP 5 * , men er schemaet det samme på alle de tabeller du ønsker at hente ud fra?
Avatar billede arne_v Ekspert
03. december 2007 - 04:54 #6
Jeg tror ikke at jeg kan komme op med en TSQL der kan klare det.

Du er vel ikke tilfældigvis på 2005 ?
Avatar billede rif1900 Nybegynder
03. december 2007 - 09:17 #7
Hej igen

Nej det er en 2000 desværre. Nå jeg må prøve at dele det op i små bidder og se om jeg på en eller anden måde ikke kan løse det.
Avatar billede janus_007 Nybegynder
04. december 2007 - 10:16 #8
rif-> Svar lige her... er det samme tabelstruktur på alle tabeller?
Avatar billede rif1900 Nybegynder
04. december 2007 - 10:34 #9
Hej Janus

undskyld jeg ikke lige fik svaret... Ja det er samme eller i hvert fald så tæt på at være at variationen kan tages højde for på en anden måde.

Jeg løste problemet igår eftermiddag efter at have brugt i alt 10 timer på det her ellers ret simple problem.

Det endte med at jeg lavede en stored procedure der kan returnere range eller meanvalue fra en givet tabels sidste resultatsæt som også viste sig at være varierende.

Herefter har jeg så en stored procedure der løber alle tabellerne igennem og ligger de i en anden temp tabel.

Det blev en lidt kluntet løsning men det eksekvere skam fint så er godt tilfreds.

Ellers tak for hjælpen janus og jer andre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester