Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Результирующая таблица из множества таблиц
     
    
Добавлено: 05.03.11 19:32
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Zahar | Web-сайт: partnerka-ru.info
 Zahar | Web-сайт: partnerka-ru.info
      
       
  
Имеется таблица с исчерпывающим перечнем всех студентов:
 
    
allStudents
id    FIO     
1     Сидоров
...
48    Петров
...
97    Иванов 
Имеется совокупность одинаковых по структуре таблиц с результатами тестирования студентов (каждому тестированию соответствует одна таблица). Очень упрощённо структура таблицы такая:
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,
...
У меня в результате получается такая результирующая таблица:
Сидоров  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
 Zahar









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







Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #3
       
Добавлено:  06.03.11 00:59
       
    
       
  
Если речь идет о SQL Server, то есть функция ISNULL.
 
    
ISNULL(NULL, 20) вернет 20
ISNULL(10,20) вернет 10.
Т.е. если первый аргумент NULL, возвращаетяс второй, все просто.
Это прямо в запросе можно использовать.
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: Zahar
 Zahar









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