Oprettet tor. d. 02. september 2010 kl. 10:24:02

Jonasmp
Jonasmp (2.440 point. Point ude: 260)

Query

Jeg har en tabel som indeholder resultater, der i en forenklet udgave ser sådan ud:

TEST_ID |  TOPIC_ID | RESULT
_________________________
1    |  4      |  6.8
2    |  4      |  4.7
1    |  6      |  5.1
2    |  6      |  3.1


Jeg har nu udfordringen at lave et view der skal vise forskellen på de to test.
Altså resulatatet skal se sådan ud. ( DIFFRESULT regnes ud som test 1 - test2  for hvert topic)

TOPIC_ID |  DIFFRESULT
___________________
4    |  2.1
6    |  2.0

Har ingen Ide om hvordan jeg kan gøre det i SQL??
I det virkelige eksempel er der op til 9 test der kan blive lagt sammen eller trukket fra hinanden, men den tid den glæde :-)

På forhånd tak.

Jonas

Skrevet tor. d. 02. september 2010 kl. 12:32:17| #1

janus_007
janus_007 (29.995 point)
I dit eksempel har du trukket dem fra hinanden, hvis du har flere test end 2, hvad skal så trækkes fra hvad?

Skrevet tor. d. 02. september 2010 kl. 13:40:40| #2

Jonasmp
Jonasmp (2.440 point)
Det er lidt forskellige i forskellige situationer.
Men det er kune simple operationer som at lægge til hinanden og trække fra.
Har lavet denne query som virker, men er det den smarteste måde?

SELECT    TOPIC_ID,
                          (SELECT    result
                            FROM          test1 w
                            WHERE      w.topic_id = dbo.TEST1.topic_id AND test_id = 1) -
                          (SELECT    result
                            FROM          test1 r
                            WHERE      r.topic_id = dbo.TEST1.topic_id AND test_id = 2) AS Expr1
FROM        dbo.TEST1
GROUP BY TOPIC_ID

Skrevet tor. d. 02. september 2010 kl. 19:19:16| #3

buzzzz
buzzzz (46.571 point)
ifyoudo.net
SELECT TopicID, Min(Results), Max(Results) FROM Test1 GROUP BY TopicID

Overstående er ikke testet ... men det burde tage den test med flest og mindst point ... og ja, du kan jo også trække den ene fra den anden ...

SELECT TopicID, max(Results) - min(Results) as [diff] FROM Test1 GROUP BY TopicID

mvh

Skrevet tor. d. 02. september 2010 kl. 19:56:54| #4

Christian_Belgien
Christian_Belgien (40.117 point)
Hvis du for hvert topic altid har precis to tests med test_id 1 og 2 og det altid er 2erne der skal traekkes fra 1erne saa ville det vaere simpler at vise result fra test_id2 negativt og saa tage summen saaledes:

SELECT topic_id, sum(result) FROM jonasmp GROUP BY topic_id;

Hvis du gerne vil bevare vaerdierne som de er kunne du midlertidigt saette 2erne negativt, tage summen, og saette 2erne tilbage til posetivt igen. Saaledes:

UPDATE jonasmp SET result = -result WHERE test_id = 2;
SELECT topic_id, sum(result) FROM jonasmp GROUP BY topic_id;
UPDATE jonasmp SET result = -result WHERE test_id = 2;

Skrevet tor. d. 02. september 2010 kl. 20:02:02| #5

Christian_Belgien
Christian_Belgien (40.117 point)
Jeg saa ikke at buzzzz havde lavet et indlaeg mens jeg arbejdede med mit.  Jeg har ikke studeret det, men buzzzz synes at forstaa at det mindste resultat skal traekkes fra det stoerste hvorimod jeg forstod fra spoergsmaalet at 2erne skal traekkes fra 1erne, hvilket saa naturligvis kan levere en negativ sum.  Hvad siger Jonasmp?

Og saa en kommentar:  Jeg havde for test lavet en tabel kaldet jonasmp i stedet for test1, men det skal du naturligvis lave om til dit eget tabelnavn.

Skrevet tor. d. 02. september 2010 kl. 20:06:11| #6

buzzzz
buzzzz (46.571 point)
ifyoudo.net
Jeg så bare:
TOPIC_ID |  DIFFRESULT
___________________
4    |  2.1
6    |  2.0

Og deraf mit eks.

Men ja, skal det være på den anden måde, så skal TestID også med ud ... og så bliver man jo nød til at lave lidt join eller måske CTE.

Postede kun min da jeg synes det var en sjov løsning på et problem :-)

mvh

Skrevet lør. d. 04. september 2010 kl. 22:05:28| #7

Christian_Belgien
Christian_Belgien (40.117 point)
jonasmp, fik du mit indlaeg?  Jeg er spaendt paa din reaktion.  Jeg tillader mig at oprette dette som svar for at lette lukning hvis du skulle finde at mig indlaeg har vaeret til hjaelp.

Skrevet lør. d. 04. september 2010 kl. 22:26:48| #8

buzzzz
buzzzz (46.571 point)
ifyoudo.net
Gør det vel som sådan ikke lettere ... så kunne du jo ligeså godt have smidt dit første som svar :-)

Men det kræver nok lidt mere info fra ham ... før svar kan gives ...

Man kan jo også bare tage ABS af en værdi, så vil den jo også være positiv ...

mvh

Skrevet fre. d. 04. marts 2011 kl. 18:19:40| #9

Christian_Belgien
Christian_Belgien (40.117 point)
jonasmp, jeg proever lige en gang til.  Du oprettede dette spoergsmaal for et halvt aar siden, men der har ikke vaeret nogen aktivitet paa det siden to dage efter oprettelsen.  Det er uden tvivl ikke laengere aktuelt.  Kan jeg bede dig lukke det, for god ordens skyld og saa det ikke laengere staar som aabent i min (og andres) liste af indlaeg.  Hvad enten du oensker at afgive points eller du selv vil oprette et svar til at acceptere, afslut hvad du begyndte paa og luk spoergsmaalet.  Please.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Ændret dato visning i SQL Express

Oprettet den 9. februar 2012 kl. 14.50
simsen giver 30 point for svar | Giv et svar »

Kan ikke få forbindelse til SQL Server...

Oprettet den 9. februar 2012 kl. 11.07
VVC2620 giver 60 point for svar | Giv et svar »

Fejl i data, hvis data er omkredset af {} så skal de...

Oprettet den 9. februar 2012 kl. 09.37
jokkejensen giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger