Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Результирующая таблица из множества таблиц Добавлено: 05.03.11 19:32  

Автор вопроса:  Zahar | Web-сайт: partnerka-ru.info
Имеется таблица с исчерпывающим перечнем всех студентов:

allStudents

id    FIO    

1     Сидоров
...
48    Петров
...
97    Иванов



Имеется совокупность одинаковых по структуре таблиц с результатами тестирования студентов (каждому тестированию соответствует одна таблица). Очень упрощённо структура таблицы такая:

Table1

id    FIO       Rez

48    Петров    76
97    Иванов    72
167   Павлов    101



При этом в тесте принимают участие не все студенты из списка (кто-то болел, сачковал и т.д.), соответственно отсутствующих в таблтце просто не будет.




Мне необходимо вывести таблицу участия студентов в тестированиях за год и статистику (количество) тестов, в которых они учавствовали.
Для этого я создаю таблицу совпадений:

SELECT FIO, Q1.isTest1 AS isTest1, Q2.isTest2 AS isTest2, ... FROM
allStudents,
(SELECT id, 1 AS isTest FROM Table1) AS Q1,
(SELECT id, 1 AS isTest FROM Table2) AS Q2,
...
allStudents LEFT JOIN Q1 ON allStudents.id=Q1.id,
allStudents LEFT JOIN Q2 ON allStudents.id=Q2.id,
...


У меня в результате получается такая результирующая таблица:

FIO      isTest1   isTest2    ....

Сидоров  1         1
...
Петров   Null      1
...
Иванов   Null      Null


Единичка соответствует участию студента в тесте.


Нет проблем подсчитать через ADO-recordset и вывести в отдельную колонку количество сданных студентами тестов.
Но это очень долго при большом объёме таблиц и неудобно.
Нельзя ли это как-то сделать во время исполнения SQL-запроса?
Первая мысль, которая приходит в голову, это первую строку вышеуказанного запроса дополнить суммой полей:
SELECT FIO, Q1.isTest1 AS isTest1, Q2.isTest2 AS isTest2, ..., isTest1+isTest2+... AS Summa FROM ...Но если хотя бы одно из полей содержит Null сумма полей также будет Null. Что же тут можно придумать?


Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #1 Добавлено: 05.03.11 19:40
а если null просто поменять на 0?

Ответить

Номер ответа: 2
Автор ответа:
 Zahar



Вопросов: 91
Ответов: 67
 Web-сайт: partnerka-ru.info
 Профиль | | #2
Добавлено: 05.03.11 23:45
Хорошая мысль!
А как это сделать?

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 06.03.11 00:59
Если речь идет о SQL Server, то есть функция ISNULL.

ISNULL(NULL, 20) вернет 20
ISNULL(10,20) вернет 10.

Т.е. если первый аргумент NULL, возвращаетяс второй, все просто.
Это прямо в запросе можно использовать.

Ответить

Номер ответа: 4
Автор ответа:
 Zahar



Вопросов: 91
Ответов: 67
 Web-сайт: partnerka-ru.info
 Профиль | | #4
Добавлено: 07.03.11 20:39
К сожалению, это Access

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам