CREATE PROC [dbo].[proc-SelectStudentMonthAttendanceReport]
(
@ClassID NVARCHAR(150), @SectionID NVARCHAR(150), @AttendanceMonth datetime,@AttendanceYear datetime)
AS
BEGIN
SELECT * INTO #Temp
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY StudentName ASC) As SrNo, StudentAdmission.StudentName, StudentAttendance.Attendance, StudentAttendance.AttendanceDate
FROM StudentAdmission INNER JOIN
Class ON StudentAdmission.ClassID = Class.ClassID INNER JOIN
Section ON StudentAdmission.SectionID = Section.SectionID INNER JOIN
StudentAttendance ON StudentAdmission.StudentID = StudentAttendance.StudentID
WHERE Class.ClassID = @ClassID AND Section.SectionID = @SectionID AND MONTH(studentAttendance.AttendanceDate) = MONTH(@AttendanceMonth) AND YEAR(studentAttendance.AttendanceDate) = YEAR(@AttendanceYear)) as x
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX), @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName = ISNULL(@ColumnName +',','')+ QUOTENAME(AttendanceDate) FROM (SELECT DISTINCT AttendanceDate
FROM #Temp) AS [Days]
SET @DynamicPivotQuery =';WITH CTE AS(SELECT [AttendanceDate], StudentName, Attendance FROM #Temp)
SELECT StudentName,'+@ColumnName+' FROM CTE
PIVOT (MAX(Attendance) FOR [AttendanceDate] IN('+@ColumnName+')) p
ORDER BY StudentName DESC'
EXEC(@DynamicPivotQuery)
DROP TABLE #Temp
END
VB.NET Code to return value
Private Sub lbFilterClass_Click(sender As Object, e As EventArgs) Handles lbFilterClass.Click
Dim amonth As Integer = Convert.ToInt32(ddlMonth.SelectedValue)
Dim ayear As Integer = Convert.ToInt32(ddlYear.SelectedItem.Text)
Dim constring As String = ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString
Dim con As New SqlConnection(constring)
Try
con.Open()
Dim sqlComm As New SqlCommand("proc-SelectStudentMonthAttendanceReport", con)
sqlComm.Parameters.AddWithValue("@AttendanceMonth", amonth)
sqlComm.Parameters.AddWithValue("@AttendanceYear", ayear)
sqlComm.Parameters.AddWithValue("@ClassID", ddlClass.SelectedValue)
sqlComm.Parameters.AddWithValue("@SectionID", ddlSection.SelectedValue)
sqlComm.CommandType = CommandType.StoredProcedure
Dim da As SqlDataAdapter = New SqlDataAdapter(sqlComm)
Dim ds As New DataSet()
'Dim da As New SqlDataAdapter()
'da.SelectCommand = sqlComm
da.Fill(ds)
con.Close()
If ds.Tables(0).Rows.Count > 0 Then
For i As Integer = 1 To DateTime.DaysInMonth(ayear, amonth)
Dim columnExist As Boolean = False
For j As Integer = 1 To ds.Tables(0).Columns.Count - 1
If i.ToString() = ds.Tables(0).Columns(j).ColumnName Then
columnExist = True
End If
Next
If Not columnExist Then
Dim col As New DataColumn() With {
.ColumnName = i.ToString(),
.DataType = GetType(String),
.DefaultValue = "P/A"
}
ds.Tables(0).Columns.Add(col)
End If
Next
gvStaff.DataSource = ds.Tables(0)
gvStaff.DataBind()
Else
lblerror.ForeColor = System.Drawing.Color.Red
lblerror.Text = "Record Not Found"
End If
Catch ex As Exception
lblerror.ForeColor = System.Drawing.Color.Red
lblerror.Text = ex.Message
Finally
con.Close()
End Try
End Sub
Problem is code displaying "Cannot find table 0."