Как узнать посещаемость студента по дате с помощью запроса sql? - PullRequest
2 голосов
/ 09 января 2020

В моей базе данных есть эти данные. Теперь я хочу запрашивать и получать данные на основе даты и группы по roll_number. Я могу получить все данные, используя

select * from attendance_records where intake='36-1' 

Но я не могу найти то, что хочу. Я изучаю базы данных и SQL. Я использовал группу по варианту, как показано ниже, но мой результат не тот, который я хочу. Пожалуйста, дайте мне знать, как я получу тот результат, который я добавил на втором рисунке. Это поможет мне в изучении базы данных.

select * from attendance_records where intake='36-1' group by date

Но приведенный выше запрос дает только одну информацию о студенте. Я не мог найти то, что я хочу.

1-й пи c: Моя таблица базы данных

enter image description here

2-й пи c : Я хочу получить этот результат, используя SQL запрос

enter image description here

1 Ответ

1 голос
/ 10 января 2020

Это работает:

SELECT * INTO #attendance_records 
FROM
(
SELECT 69 ID,'snaha sadhu' student_name, 16 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), getdate(), 103) date 
UNION ALL
SELECT 70 ID,'keya' student_name, 37 roll_number, '36-1' intake, 0 attendence_status, CONVERT(VARCHAR(10), getdate(), 103) date
union
SELECT 69 ID,'snaha sadhu' student_name, 16 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), dateadd(day,1,getdate()), 103) date 
UNION ALL
SELECT 70 ID,'keya' student_name, 37 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), dateadd(day,1,getdate()), 103)  date
)TAB

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + '[' + [date] + ']'
FROM (select distinct [date] from #attendance_records) s

SET @DynamicPivotQuery = 
  N'select *, cast(CONVERT(DECIMAL(18,2),CONVERT(DECIMAL(18,2),' + replace(@ColumnName,',','+') + ')/CONVERT(DECIMAL(18,2),(select COUNT(distinct [date]) from #attendance_records)))*100 as varchar(10))+''%''
 from 
(SELECT student_name, roll_number, intake, ' + @ColumnName + '
 FROM #attendance_records       
        PIVOT(      sum(attendence_status)            
            FOR [date] IN (' + @ColumnName + ')) 
            AS P) x'

EXEC sp_executesql @DynamicPivotQuery
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...