SQL streng der læser flere kolonner på samme tid og laver SUM.
Her en MS database som indeholder medlems numre, om aktivitet er tildelt, og om den er betalt. Er det muligt at lave en SQL streng der giver en SUM ud fra følgende: Ser om Aktx er = checked og efterfølgende om AktxBetalt står 2018 = ok skal tælles med i SUM. Aktx er = checked og Aktx Betalt ikke = 2018 = ikke ok skal ikke tælles med i SUM.
Udfordringen er at SQL streng skal se på Akt1, Akt2, Akt3 osv er = checked og Akt1Betalt, Akt2Betalt, Akt3Betalt osv er = 2018, SUM en op ellers tæl den ikke med for Medlemsnummer 1 og der efter det samme for Medlemsnummer 2.... osv. Kn og har lavet det i en løkke, men der er MANGE records og MANGE Aktx så det tager LANG tid med en løkke.
Både ja og nej. Har været en checked i en Aktx og en 2018 i AktxBetalt skal den tælle for 1. Kommer der flere 2018 eller flere checked skal den stadig kun tælle 1. Ingen checked = ingen +1 til Antal. 1 checked - - - - 2018 - - - - 1 2 - checked - - - 2018 2018 - - - 1 4 checked - checked checked - - 2016 - 2018 2018 - - 1 5 checked - - - checked 2011 - - - 2018 1 6 - - - - - - - - - - 0 7 checked - - - checked 2011 - - - 2017 0 8 - - - - - -- - - 2018 0 Der skal forekomme en checked et sted i Aktx og en 2018 i AktxBetalt før der tælles op +1 til Antal.
Kan du ligge et billede op som viser den rigtige dataopstilling? Ret svært at gennemskue med formatteringen herinde. Evt som dit data ser ud og forventet resultat? Vil tror du kan løse det med noget case when og en sum
select * , case when (akt1 = 'checked' and Akt1Betalt = 2018) then 1 when (akt2 = 'checked' and Akt2Betalt = 2018) then 1 when (akt3 = 'checked' and Akt3Betalt = 2018) then 1 when (akt4 = 'checked' and Akt4Betalt = 2018) then 1 when (akt5 = 'checked' and Akt5Betalt = 2018) then 1 else 0 end as Nom
Det ser meget rigtigt ud, men jeg kan ikke få det til at virke på min .asp side. Det er .mdb MSSQL jeg kører:
("select *, case when (akt1 = 'checked' and Akt1Betalt = '2018') then '1' when (akt2 = 'checked' and Akt2Betalt = '2018') then '1' when (akt3 = 'checked' and Akt3Betalt = '2018') then '1' else '0' end as Nom from Adresseliste")
Du skal bruge IIF funktionen istedet for case when så. Det er nok fordi case when ikke virker til .mdb.. JEg prøver lige at skrive funktionen i morgen når jeg er på arbejde. Kan ikke lige gennemskue uden mangement studio
Nu kan jeg få strengen til at virke, men den tæller ikke helt som den skal. Her er det jeg bruger nu, men det tager for lang tid, derfor er jeg ude efter en SQL streng der kan gøre det:
T=0 AntalBetaltForAarTilbage.movefirst Do while not AntalBetaltForAarTilbage.EOF BetaltStatus = "True" For y = 1 to 40 If AntalBetaltForAarTilbage("Akt" & y) = "checked" Then If Ucase(Trim(AntalBetaltForAarTilbage("Akt" & y & "Betalt"))) = "2018" Then BetaltStatus = "False" End If End If Next If BetaltStatus = "False" Then T=T+1 End If AntalBetaltForAarTilbage.movenext loop
Kan du beskrive hvad du mnagler? Jeg forstår ikke helt 100 hvad du er ude efter hvis den ikke blot skal tælle 1 hver gang du har en checked i en akt og denne tilhørende akt = 2018
En record indeholder Akt1 til Akt40 og Akt1Betalt til Akt40Betalt. Hvis en record indeholder checked i en af de 40 Akt1 til 40 og der i en af de 40 Akt1Betalt til Akt40Betalt = 2018 så tælles der op med 1 (x=x+1) = 1
Hvis record nummer to indeholder checked i en af de 40 Akt1 til 40 og der i en af de 40 Akt1Betalt til Akt40Betalt = 2018 så tælles der op med 1 (x=x+1) = 2
Hvis fx record nummer tre indeholder checked i en af de 40 Akt1 til 40 og der i en af de 40 Akt1Betalt til Akt40Betalt = 2011 så tælles der IKKE op med 1 (x=x+1) forbliver = 2
Hvis fx record nummer fire IKKE indeholder checked i en af de 40 Akt1 til 40 og der i en af de 40 Akt1Betalt til Akt40Betalt = 2011 eller noget andet så tælles der IKKE op med 1 (x=x+1) forbliver = 2
Så hvis en record indeholder checked i bare en af de 40 Akt1 til 40 og der samtidigt i en af de 40 Akt1Betalt til Akt40Betalt = 2018 så tælles der op med 1 (x=x+1) altså x forøges hver gang.
Tror ikke helt jeg forstår. Skal jeg bruge den sidste nye streng du her over har skrevet i stedet for den forrige?
Før fik jeg resultatet ud på følgende måde: response.write(AntalOprettedeaa("Nom"))
Hvad gør jeg nu?
set AntalOprettedeaa = conn.execute("select * ,IIF(akt1 = 'checked' and Akt1Betalt = '2018',1,IIF(akt2 = 'checked' and Akt2Betalt = '2018',1,IIF(akt3 = 'checked' and Akt3Betalt = '2018',1,IIF(akt4 = 'checked' and Akt4Betalt = '2018',1,IIF(akt5 = 'checked' and Akt5Betalt = '2018',1,0))))) as Nom from Adresseliste")
set AntalOprettedebb = conn.execute("select sum(Nom) from (select * ,IIF(akt1 = 'checked' and Akt1Betalt = '2018',1,IIF(akt2 = 'checked' and Akt2Betalt = '2018',1,IIF(akt3 = 'checked' and Akt3Betalt = '2018',1,IIF(akt4 = 'checked' and Akt4Betalt = '2018',1,IIF(akt5 = 'checked' and Akt5Betalt = '2018',1,0))))) as Nom from Adresseliste)x")
Kan godt være det er mig der ikke helt forstår det, men kan ikke få den sidste til at give sum, den giver heller ikke fejl, så muligt jeg response.write noget forkert.
set AntalOprettedebb = conn.execute("select sum(Nom) from (select * ,IIF(akt1 = 'checked' and Akt1Betalt = '2018',1,IIF(akt2 = 'checked' and Akt2Betalt = '2018',1,IIF(akt3 = 'checked' and Akt3Betalt = '2018',1,IIF(akt4 = 'checked' and Akt4Betalt = '2018',1,IIF(akt5 = 'checked' and Akt5Betalt = '2018',1,0))))) as Nom from Adresseliste)x")
Hej det virker. Dog er jeg løbet i det problem at jeg får : Expression too complex in query Grunden er at jeg har Akt1 til Akt40 og Akt1Betalt til Akt40Betalt og det er for mange i en SQL streng. Så kan ikke bruge strengen...... Øv..
Test: Kæmpestort gaming-headset er perfekt til dine lange Teams-møder - men har også nogle besværligheder
Længe før vi andre blev slået hjem til hjemmekontorets endeløse webmøder har gamerne gennemskuet behovet for komfortabelt grej. Så vi tog danske EPOS top gamingheadset med på arbejde. Læs testen her.
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Ryk SAP-workloads i skyen – og tag alle de kendte fordele med
SAP-kunder verden over har gennem de seneste 15 år draget fordel af løsninger baseret på NetApps ONTAP-data management-platform.
Herunder en mere sikker og stabil drift samt forenklet administration, hvilket er afgørende for at gennemføre projekter effektivt og for at reducere deres risikoprofil.
Gennem de seneste år er det i høj grad også blevet muligt at rykke SAP-workloads i skyen, og det ønsker mange virksomheder rimeligvis at drage fordel af – men uden at sige farvel til mulighederne med NetApp ONTAP.
I dette whitepaper stiller vi skarpt på mulighederne for at indarbejde NetApp Cloud Volumes ONTAP and Azure NetApp Files som del af en SAP-strategi baseret på Microsoft Azure.