Avatar billede mema Nybegynder
20. oktober 2007 - 02:03 Der er 7 kommentarer og
1 løsning

Fra dato - til Dato (sql sætning og to tekstbokse)

Jeg havde tidligere en sql-select sætning, der virkede med en Access database i en Webform.
Det samme sql sætning virker nu ikke, når jeg bruger en sql database.

Der har jeg to tekstbokse, der vha. javascript viser 2 kalendere. Her vælger man to datoer (i string formatet 'yyyy-MM-dd') og mening er at sql-sætningen tæller hvormange entries for registreringsdatoer(Reg_tid) er der i databasen plus total og hvis jeg når det, procenten.

Der er to tabeller: Resultat og Henvender, der relaterer med hindanden med HenvenderID.
Her er min sql-sætning, der ikke virker. Der vises intet på griden (kun feltnavne!):

strSql = "SELECT Henvender.Henvender, Count(Reg_tid) AS 'Antal i perioden',(SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between 'Fra.Text' AND 'Til.Text')) AS [Total i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between 'Fra.Text' AND 'Til.Text') Group by Henvender.Henvender"

'Fra' og 'Til' er navne på to tekstbokse.

Jeg bruger VS 2005 og sql 2005.
Avatar billede arne_v Ekspert
20. oktober 2007 - 04:06 #1
prøv:

strSql = "SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden],(SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Total i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "') Group by Henvender.Henvender"
Avatar billede mema Nybegynder
20. oktober 2007 - 13:21 #2
Tusind tak. Send venligst et svar;-)

Jeg skal også finde procenten af hver enkelte række ('Antal i perioden') i forhold til totale forekomst i den valgte periode ('Total i perioden').

Jeg ville også give flere point for hjælpen vedr. dette. Sig mig venlist, hvis jeg skal oprette et nyt svar vedr. dette. Tak i forvejen.
Avatar billede mema Nybegynder
20. oktober 2007 - 14:30 #3
Når jeg bruger:

strSql = "SELECT Henvender.Henvender, Sum(IIf((Resultater.Reg_tid BETWEEN '" + Fra.Text + "' And '" + Til.Text + "'), 1, 0)) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultater AS R WHERE R.Reg_tid BETWEEN '" + Fra.Text + "' AND '" + Til.Text + "') AS [Total i perioden], Int(Sum(IIf((Resultater.Reg_tid BETWEEN '" + Fra.Text + "' And '" + Til.Text + "'), 1, 0)) * 100 / (SELECT Count(R.Reg_tid) FROM Resultater AS R WHERE R.Reg_tid BETWEEN '" + Fra.Text + "' AND '" + Til.Text + "') * 100) / 100 AS [Procenttal i perioden] FROM Henvender INNER JOIN Resultater ON Henvender.Henvender_ID = Resultater.Henvender_ID GROUP BY Henvender.Henvender;";

Så får jeg følgende fejl:
System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'BETWEEN'. Incorrect syntax near the keyword 'AS'. Incorrect syntax near '*'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning
...........
...........
Avatar billede arne_v Ekspert
21. oktober 2007 - 23:39 #4
Jeg tror at den er helt gal den SQL.

IIF er noget man kan bruge i Access.

Med SQLServer bruger man CASE WHEN.
Avatar billede arne_v Ekspert
21. oktober 2007 - 23:39 #5
Og et svar.
Avatar billede arne_v Ekspert
21. oktober 2007 - 23:41 #6
Jeg tror iøvrigt ikke at du behøver en CASE WHEN.

Kan:

SELECT ...,(SELECT noget ...),(SELECT noget ...)/(SELECT total ...),... FROM ...

ikke bruges ?
Avatar billede mema Nybegynder
22. oktober 2007 - 00:16 #7
Fint. Og mange tak.
Avatar billede mema Nybegynder
22. oktober 2007 - 00:52 #8
Jeg har skrevet en 'stored procedure' i Managemaent Studio:
----------
USE [BBSQ_tmt]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[z_statistik]

@Fra varchar(50),
@Til varchar(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '@Fra' AND '@Til')) AS [Total i perioden], (Count(Reg_tid)*100)/ (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '@Fra' AND '@Til')) AS [Procent i perioden]
From Resultat
INNER JOIN Henvender
ON Resultat.HenvenderID = Henvender.HenvenderID
WHERE (Reg_tid Between '@Fra' AND '@Til') Group by Henvender.Henvender
END
--------
Her virker det fint, men hvordan kan jeg bruger den i min cs-kode i VS med hensyn til to tekstfelt: Fra og Til? Og skal jeg bruge RataReader metode for at bringe det til at virke?
Nu bruger jeg dataset og dataview. Til sidst men ikke mindst ville jeg gerne vise 2 decimaler i beregning af procenten. Hvordan?:

SqlConnection conHenvender = new SqlConnection(WebConfigurationManager.ConnectionStrings["BBSQ_tmt_ConnectionString1"].ConnectionString);
DataView dvw;
DataSet ds = new DataSet();
string strSQL;
strSQL = "SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Total i perioden], (Count(Reg_tid)*100)/ (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Procent i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "') Group by Henvender.Henvender";

SqlDataAdapter objDA = new SqlDataAdapter(strSQL, conHenvender);
conHenvender.Open();
objDA.Fill(ds, "Resultat");
dvw = ds.Tables["Resultat"].DefaultView;
dg.DataSource = ds.Tables[0].DefaultView;
dg.DataSource = dvw;
dg.DataBind();
conHenvender.Close();
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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