Avatar billede testpilot_dk Nybegynder
28. maj 2007 - 15:27 Der er 3 kommentarer og
1 løsning

Omstrukturering i Output fra SQL

Hej!

  Jeg har følgende forespørgsel, er det muligt at omdanne følgende resultat til det resultat jeg ønsker.

  Min SQL sætning er således:

SELECT Description, AccLastMonthThisYear, AccLastMonthLastYear,
    AccChangeLastMonth
FROM SalesStatistics
WHERE CustomerID= 182722

Nuværende Output
     
      Description      LastMonth    Last Year  Percent
200703 Test            26242.0      19750.0    32.870886075949372
200703 Test2        170.0        91.0    86.813186813186817
200703 Test3        31727.0        24085.0    31.729292090512768
200703 Total            59800.0      44986.0    32.93024496510025

Jeg ønsker at det kommer til at stå sådan her

Ønsket Output

        LastMonth_Test, LastYear_Test, Percent_Test, LastMonth_Test2, LastYear_Test2, Percent_Test2, .....

200703, 26242.0, 19750.0 , 32.870886075949372, 170.0, 91.0, 86.813186813186817

  Jeg ved ikke om det kan lade sig gøre, men hvis det kan ville jeg gerne vide hvordan jeg får det output som beskrevet
Avatar billede w13 Novice
28. maj 2007 - 15:45 #1
Det kan sagtens lade sig gøre. I din løkke, som henter fra databasen, skal du bare gemme oplysningerne i 2 strings. F.eks.:

Do While ...

  strDescription = rs("description")

  strHead = strHead & "Last Month_"&strDescription & "Last Year_"&strDescription & "Percent_"&strDescription

  strOutput = strOutput & rs("LastMonth")&"_"&strDescription & rs("LastYear")&"_"&strDescription & rs("Percent")&"_"&strDescription

Loop

Response.Write strHead
Response.Write strOutput
Avatar billede kjulius Novice
28. maj 2007 - 16:36 #2
Hvis du ønsker en løsning i ren SQL, var en mulighed:

SELECT SUM(CASE WHEN Description = 'Test' THEN AccLastMonthThisYear ELSE 0 END) AS LastMonth_Test, SUM(CASE WHEN Description = 'Test' THEN AccLastMonthLastYear ELSE 0 END) AS LastYear_Test, SUM(CASE WHEN Description = 'Test' THEN AccChangeLastMonth ELSE 0 END) AS Percent_Test, SUM(CASE WHEN Description = 'Test2' THEN AccLastMonthThisYear ELSE 0 END) AS LastMonth_Test2, SUM(CASE WHEN Description = 'Test2' THEN AccLastMonthLastYear ELSE 0 END) AS LastYear_Test2, SUM(CASE WHEN Description = 'Test2' THEN AccChangeLastMonth ELSE 0 END) AS Percent_Test2, SUM(CASE WHEN Description = 'Test3' THEN AccLastMonthThisYear ELSE 0 END) AS LastMonth_Test3, SUM(CASE WHEN Description = 'Test3' THEN AccLastMonthLastYear ELSE 0 END) AS LastYear_Test3, SUM(CASE WHEN Description = 'Test3' THEN AccChangeLastMonth ELSE 0 END) AS Percent_Test3
FROM SalesStatistics
WHERE CustomerID= 182722

For at få alle rækker i tabellen samlet til én række, er man nødt til at bruge en aggregat funktion. Her er brugt SUM.
Avatar billede testpilot_dk Nybegynder
29. maj 2007 - 08:30 #3
Send et svar kjulius!
Avatar billede kjulius Novice
29. maj 2007 - 20:56 #4
Okay, det være hermed gjort...
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