SQL Abfrage

02/11/2007 - 11:58 von Peter Haus | Report spam
Hallo zusammen,

ich stehe gerde vor einem grossen Fragezeichen.

Ich möchte Abfragen ob bei Studenten, der sich zu Prüfungen angemeldet
haben,
sich Prüfungszeiten überschneiden. Blicke jedoch nicht wie es geht.

SELECT ExamExecution.Datum, ExamExecution.Uhrzeit,
Student_Exam.StudentID, Exam.Dauer
FROM Student_Exam INNER JOIN
ExamExecution ON Student_Exam.ExamExecutionID =
ExamExecution.ExamExecutionID INNER JOIN
Exam ON ExamExecution.ExamID = Exam.ExamID
Where ???


Ich möchte alle Datensàtze herausfinden, bei denen zutrifft.
Student "Student_Exam.StudentID"
am gleichen Tag "ExamExecution.Datum"
im Zeitfenster-Anfang "ExamExecution.Uhrzeit - Exam.Dauer"
und Zeitfenster-Ende "ExamExecution.Uhrzeit + Exam.Dauer * 2"

Wie muss das Where aussehen?

Vielen Dank für die Hilfe
Peter
 

Lesen sie die antworten

#1 Peter Fleischer
03/11/2007 - 07:43 | Warnen spam
"Peter Haus" schrieb im Newsbeitrag
news:%

Ich möchte Abfragen ob bei Studenten, der sich zu Prüfungen angemeldet
haben,
sich Prüfungszeiten überschneiden. Blicke jedoch nicht wie es geht.

SELECT ExamExecution.Datum, ExamExecution.Uhrzeit,
Student_Exam.StudentID, Exam.Dauer
FROM Student_Exam INNER JOIN
ExamExecution ON Student_Exam.ExamExecutionID =
ExamExecution.ExamExecutionID INNER JOIN
Exam ON ExamExecution.ExamID = Exam.ExamID
Where ???


Ich möchte alle Datensàtze herausfinden, bei denen zutrifft.
Student "Student_Exam.StudentID"
am gleichen Tag "ExamExecution.Datum"
im Zeitfenster-Anfang "ExamExecution.Uhrzeit - Exam.Dauer"
und Zeitfenster-Ende "ExamExecution.Uhrzeit + Exam.Dauer * 2"



Hi Peter,
was für eine Tabelle ist Exam? Wozu benötigst du Student_Exam für die
Zeitangabe?

Hier mal eine prinzipielle Demo. Einfach in den Codeteile einer leeren Form
eines Windows-Projektes kopieren und ggf. ConnectionString anpassen.

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Testdata.GenerateData()
Testdata.LoadDataSet()

Dim dg As New DataGridView
Me.Controls.Add(dg)
With dg
.Dock = DockStyle.Fill
.DataSource = Testdata.GetBindindSource1
'.Columns(2).DefaultCellStyle.Format = "dd.MM.yy"
'.Columns(3).DefaultCellStyle.Format = "HH:mm"
End With
End Sub

End Class

' Class for test data

Public Class Testdata

Private Shared _cnString As String = _
"Data
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;" & _
"Integrated Security=True;User Instance=True"

Public Shared Property ConnectionString() As String
Get
Return _cnString
End Get
Set(ByVal Value As String)
_cnString = Value
End Set
End Property

Shared cn As System.Data.SqlClient.SqlConnection

Shared Sub GenerateData()
Dim i As Integer
Try
Using cn As New System.Data.SqlClient.SqlConnection(_cnString)
cn.Open()
Dim cmd As New System.Data.SqlClient.SqlCommand("", cn)
With cmd
Try
.CommandText = "DROP TABLE xTab1"
.ExecuteNonQuery()
Catch ex As Exception
End Try
.CommandText = "CREATE TABLE xTab1(ID int IDENTITY(1,1)" & _
" PRIMARY KEY, Name nvarchar(50), Datum datetime," & _
" Dauer int)"
.ExecuteNonQuery()
.CommandText = "INSERT INTO xTab1(Name, Datum, Dauer) VALUES(@p1,
@p2, @p3)"
With .Parameters
.Add(New System.Data.SqlClient.SqlParameter("@p1",
GetType(String)))
.Add(New System.Data.SqlClient.SqlParameter("@p2",
GetType(Date)))
.Add(New System.Data.SqlClient.SqlParameter("@p3",
GetType(Integer)))
End With
For i = 1 To 1000
.Parameters(0).Value = "Name " & CInt(0.5 + 4 * Rnd()).ToString
.Parameters(1).Value = Now.Date.AddMinutes(1440 * _
CInt(30 * Rnd()) + 600 + 15 * CInt(40 * Rnd()))
.Parameters(2).Value = 15 + 15 * CInt(5 * Rnd())
.ExecuteNonQuery()
Next
End With
End Using
Catch ex As Exception
Debug.WriteLine(ex.ToString)
End Try
End Sub

Shared da1 As System.Data.SqlClient.SqlDataAdapter
Shared ds As New DataSet

Shared Sub LoadDataSet()
cn = New System.Data.SqlClient.SqlConnection(_cnString)
Dim cmd1 As New System.Data.SqlClient.SqlCommand("", cn)
cmd1.CommandText = "SELECT A.ID, A.Name, A.Datum, A.Dauer," & _
" dateadd(minute,A.Dauer,A.Datum) As Ende, B.ID, B.Datum" & _
" FROM xTab1 A left JOIN xTab1 B ON (A.Name = B.Name" & _
" AND B.Datum >= A.Datum" & _
" AND B.Datum <= dateadd(minute,A.Dauer,A.Datum) AND A.ID <> B.ID)"
da1 = New System.Data.SqlClient.SqlDataAdapter(cmd1)
With da1
.MissingSchemaAction = MissingSchemaAction.AddWithKey
.FillLoadOption = LoadOption.Upsert
.Fill(ds, "Tab1")
End With
With ds.Tables("Tab1").Columns("ID")
.AutoIncrement = True
.AutoIncrementSeed = -1
.AutoIncrementStep = -1
End With
With bs1
.DataSource = ds
.DataMember = "Tab1"
End With
End Sub

Shared bs1 As New BindingSource

Shared Function GetBindindSource1() As BindingSource
Return bs1
End Function

End Class


Viele Gruesse

Peter

Ähnliche fragen