Avatar billede t-johansen Juniormester
20. november 2008 - 10:17 Der er 11 kommentarer og
1 løsning

beregning af detalje felt i rapport

Jeg skal beregne/sammenlægge et resultat ud fra en forespørgsel, som skal vises i en rapport.

tabel indhold:

Navn  type  tal
knud  00    3,25
knud  17    1,20
knud  40    0,54
knud  00    1,25
knud  40    0,45


Jeg ønsker følgende:

Alle tal skal tælles sammen for "knud" men hvis type er "40" skal værdi i tal trækkes fra i sammenlægningen, tiltrods for det jo er et plus tal.

Hvordan gør jeg dette?

Resultatet skal bare vises i et ubundet felt, det behøves ikke at gemmes i en tabel.
Avatar billede jensen363 Forsker
20. november 2008 - 10:46 #1
SELECT Tabel.Navn, Sum(IIf([Tabel]![type]=40,[Tabel]![tal]*-1,[Tabel]![tal])) AS tal
FROM Tabel
GROUP BY Tabel.Navn;
Avatar billede t-johansen Juniormester
20. november 2008 - 11:05 #2
nu spørger jeg nok lidt dumt, men hvor ville du skrive det ind henne?


i en ubundet tekstboks i en rapport under hvad?

eller i en forespørgsel i et nyt felt under "tabel" eller "kriterier"?

noget tredje?
Avatar billede jensen363 Forsker
20. november 2008 - 11:09 #3
I en forespørgsel
Avatar billede t-johansen Juniormester
20. november 2008 - 11:23 #4
Tror ikke helt jeg forstår det.

Den skal indsættes som et nyt felt i min forespørgsel. Jeg indsætter hele udtrykket i feltnavnet ik?

Jeg har lavet udtrykket om til at passe mine korrekte navne:

Tabel.Navn = dbo_TIME_CONTROL_END
Type = WORK_ACT_TEXT
Tal = WORK_USED_TIME
nyt feltnavn i forespørgslen = beregnet


SELECT dbo_TIME_CONTROL_END Sum(IIf([dbo_TIME_CONTROL_END]![WORK_ACT_TEXT]=40,[dbo_TIME_CONTROL_END]![WORK_USED_TIME]*-1,[beregnet])) AS tal



korrekt?
Avatar billede jensen363 Forsker
20. november 2008 - 11:43 #5
Din SQL sætning bag om forespørgslen skal indeholde dette :

SELECT Tabel.dbo_TIME_CONTROL_END, Sum(IIf([Tabel]![WORK_ACT_TEXT]=40,[Tabel]![WORK_USED_TIME]*-1,[Tabel]![WORK_USED_TIME])) AS WORK_USED_TIME
FROM Tabel
GROUP BY Tabel.dbo_TIME_CONTROL_END;
Avatar billede jensen363 Forsker
20. november 2008 - 15:13 #6
Jeg takker for point :-)
Avatar billede t-johansen Juniormester
20. november 2008 - 15:34 #7
Jeg takker for hjælpen.

Jeg har ikke helt fået det løst, men kan se hvordan, skal bare lige have den smeltet sammen med min forespørgsel.

Nemlig denne:

SELECT dbo_PERSON_INFO.PERSON_NUMBER, dbo_PERSON_INFO.NAME, dbo_TIME_CONTROL_END.PERSON_GROUP, dbo_TIME_CONTROL_END.WORK_TRANS_DATE, dbo_TIME_CONTROL_END.WORK_ACT_CODE, dbo_TIME_CONTROL_END.WORK_ACT_TEXT, dbo_TIME_CONTROL_END.WORK_USED_TIME, dbo_TIME_CONTROL_END.DAYTIME_START_1, dbo_TIME_CONTROL_END.DAYTIME_END_1, dbo_TIME_CONTROL_END.WORK_START_TIME, dbo_TIME_CONTROL_END.WORK_END_TIME
FROM dbo_PERSON_INFO INNER JOIN dbo_TIME_CONTROL_END ON dbo_PERSON_INFO.PERSON_NUMBER = dbo_TIME_CONTROL_END.PERSON_NUMBER
GROUP BY dbo_PERSON_INFO.PERSON_NUMBER, dbo_PERSON_INFO.NAME, dbo_TIME_CONTROL_END.PERSON_GROUP, dbo_TIME_CONTROL_END.WORK_TRANS_DATE, dbo_TIME_CONTROL_END.WORK_ACT_CODE, dbo_TIME_CONTROL_END.WORK_ACT_TEXT, dbo_TIME_CONTROL_END.WORK_USED_TIME, dbo_TIME_CONTROL_END.DAYTIME_START_1, dbo_TIME_CONTROL_END.DAYTIME_END_1, dbo_TIME_CONTROL_END.WORK_START_TIME, dbo_TIME_CONTROL_END.WORK_END_TIME
HAVING (((dbo_TIME_CONTROL_END.PERSON_GROUP) Like [Indtast Mekaniker gruppe]) AND ((dbo_TIME_CONTROL_END.WORK_TRANS_DATE) Between [fra dato format dd-mm-åååå] And [til dato format dd-mm-åååå]) AND ((dbo_TIME_CONTROL_END.WORK_ACT_CODE)="00" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="02" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="40" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="17" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="18" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="20" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="21" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="22" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="23" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="24" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="25" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="26" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="28" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="29"))
ORDER BY dbo_PERSON_INFO.PERSON_NUMBER;
Avatar billede jensen363 Forsker
20. november 2008 - 15:57 #8
Velbekommen :-)
Avatar billede kjulius Novice
21. november 2008 - 01:21 #9
Hvis du i stedet vil lave din opsummering i rapporten, men bare have vendt fortegnet på dit WORK_USED_TIME felt når WORK_ACT_CODE feltet er "40" i forespørgslen, kan du sikkert nøjes med dette:

SELECT dbo_PERSON_INFO.PERSON_NUMBER,
  dbo_PERSON_INFO.NAME,
  dbo_TIME_CONTROL_END.PERSON_GROUP,
  dbo_TIME_CONTROL_END.WORK_TRANS_DATE,
  dbo_TIME_CONTROL_END.WORK_ACT_CODE,
  dbo_TIME_CONTROL_END.WORK_ACT_TEXT,
  IIf(dbo_TIME_CONTROL_END.WORK_ACT_CODE="40", - dbo_TIME_CONTROL_END.WORK_USED_TIME, dbo_TIME_CONTROL_END.WORK_USED_TIME) AS WORK_USED_TIME,
  dbo_TIME_CONTROL_END.DAYTIME_START_1,
  dbo_TIME_CONTROL_END.DAYTIME_END_1,
  dbo_TIME_CONTROL_END.WORK_START_TIME,
  dbo_TIME_CONTROL_END.WORK_END_TIME
FROM dbo_PERSON_INFO
INNER JOIN dbo_TIME_CONTROL_END ON dbo_PERSON_INFO.PERSON_NUMBER = dbo_TIME_CONTROL_END.PERSON_NUMBER
WHERE (((tec.PERSON_GROUP) Like [Indtast Mekaniker gruppe])
    AND ((tec.WORK_TRANS_DATE) Between [fra dato format dd-mm-åååå] And [til dato format dd-mm-åååå])
    AND ((tec.WORK_ACT_CODE) IN ("00", "02", "40", "17", "18", "20", "21", "22", "23", "24", "25", "26", "28", "29"))
ORDER BY dbo_PERSON_INFO.PERSON_NUMBER;
Avatar billede kjulius Novice
21. november 2008 - 01:25 #10
Hov, sorry, jeg havde leget lidt med en lidt kortere alias for tabelnavnet.

SELECT dbo_PERSON_INFO.PERSON_NUMBER,
  dbo_PERSON_INFO.NAME,
  dbo_TIME_CONTROL_END.PERSON_GROUP,
  dbo_TIME_CONTROL_END.WORK_TRANS_DATE,
  dbo_TIME_CONTROL_END.WORK_ACT_CODE,
  dbo_TIME_CONTROL_END.WORK_ACT_TEXT,
  IIf(dbo_TIME_CONTROL_END.WORK_ACT_CODE="40", - dbo_TIME_CONTROL_END.WORK_USED_TIME, dbo_TIME_CONTROL_END.WORK_USED_TIME) AS WORK_USED_TIME,
  dbo_TIME_CONTROL_END.DAYTIME_START_1,
  dbo_TIME_CONTROL_END.DAYTIME_END_1,
  dbo_TIME_CONTROL_END.WORK_START_TIME,
  dbo_TIME_CONTROL_END.WORK_END_TIME
FROM dbo_PERSON_INFO
INNER JOIN dbo_TIME_CONTROL_END ON dbo_PERSON_INFO.PERSON_NUMBER = dbo_TIME_CONTROL_END.PERSON_NUMBER
WHERE (((dbo_TIME_CONTROL_END.PERSON_GROUP) Like [Indtast Mekaniker gruppe])
    AND ((dbo_TIME_CONTROL_END.WORK_TRANS_DATE) Between [fra dato format dd-mm-åååå] And [til dato format dd-mm-åååå])
    AND ((dbo_TIME_CONTROL_END.WORK_ACT_CODE) IN ("00", "02", "40", "17", "18", "20", "21", "22", "23", "24", "25", "26", "28", "29"))
ORDER BY dbo_PERSON_INFO.PERSON_NUMBER;
Avatar billede t-johansen Juniormester
21. november 2008 - 08:52 #11
@Kjulius

(Du er en skat) havde jeg sagt hvis du var en pige... Det er perfekt, dog var der en syntax fejl (som jeg ikke kunne finde) så lavede den på denne måde, selvom jeg kan se din er meget smartere:

SELECT dbo_PERSON_INFO.PERSON_NUMBER, dbo_PERSON_INFO.NAME, dbo_TIME_CONTROL_END.PERSON_GROUP, dbo_TIME_CONTROL_END.WORK_TRANS_DATE, dbo_TIME_CONTROL_END.WORK_ACT_CODE, dbo_TIME_CONTROL_END.WORK_ACT_TEXT, IIf(dbo_TIME_CONTROL_END.WORK_ACT_CODE="40",-dbo_TIME_CONTROL_END.WORK_USED_TIME,dbo_TIME_CONTROL_END.WORK_USED_TIME) AS WORK_USED_TIME, dbo_TIME_CONTROL_END.DAYTIME_START_1, dbo_TIME_CONTROL_END.DAYTIME_END_1, dbo_TIME_CONTROL_END.WORK_START_TIME, dbo_TIME_CONTROL_END.WORK_END_TIME
FROM dbo_PERSON_INFO INNER JOIN dbo_TIME_CONTROL_END ON dbo_PERSON_INFO.PERSON_NUMBER=dbo_TIME_CONTROL_END.PERSON_NUMBER
GROUP BY dbo_PERSON_INFO.PERSON_NUMBER, dbo_PERSON_INFO.NAME, dbo_TIME_CONTROL_END.PERSON_GROUP, dbo_TIME_CONTROL_END.WORK_TRANS_DATE, dbo_TIME_CONTROL_END.WORK_ACT_CODE, dbo_TIME_CONTROL_END.WORK_ACT_TEXT, dbo_TIME_CONTROL_END.WORK_USED_TIME, dbo_TIME_CONTROL_END.DAYTIME_START_1, dbo_TIME_CONTROL_END.DAYTIME_END_1, dbo_TIME_CONTROL_END.WORK_START_TIME, dbo_TIME_CONTROL_END.WORK_END_TIME
HAVING (((dbo_TIME_CONTROL_END.PERSON_GROUP) Like [Indtast Mekaniker gruppe]) AND ((dbo_TIME_CONTROL_END.WORK_TRANS_DATE) Between [fra dato format dd-mm-åååå] And [til dato format dd-mm-åååå]) AND ((dbo_TIME_CONTROL_END.WORK_ACT_CODE)="00" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="02" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="40" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="17" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="18" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="20" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="21" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="22" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="23" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="24" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="25" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="26" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="28" Or (dbo_TIME_CONTROL_END.WORK_ACT_CODE)="29"))
ORDER BY dbo_PERSON_INFO.PERSON_NUMBER;


kan jeg sende dig point eller skal jeg lige oprette en tråd først, du kan svare på?
Avatar billede kjulius Novice
21. november 2008 - 20:06 #12
Nej, jeg skal ikke have noget. Løsningen var jo kommet fra jensen363, jeg har bare sat den ind i din sætning (og åbenbart introduceret en fejl i processen). Så ingen point til mig...
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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