Лучший отвечающий
Выборка по разным условиям

Вопрос
-
Подскажите, пожалуйста, можно ли при создании вьюхи задавать разные условия выборки для разных столбцов?
(к примеру имеется 2 таблицы, "Предмет" с перечнем всех предметов и "Оценки_студента", хранящие оценки студентов по различным предметам. Таблицы связанны напрямую через поле "Код_предмета". Необходимо подсчитать, сколько студентов имеют оценку "2", сколько "3" и т.д. Результаты вывести в отдельную таблицу с полями Предмет, Кол-во двоишников, Кол-во троишников и т.д.)
27 июля 2010 г. 6:21
Ответы
-
--Podgotawliwaet dannie CREATE TABLE #Predmet (PredmetID tinyint identity(1,1), PredmetName varchar(56)) INSERT INTO #Predmet(PredmetName) VALUES('Matematika'),('Physika') GO CREATE TABLE #OcenkaStudenta (OcenkaStudentaID int identity(1,1), PredmetID tinyint, StudentID int, Ocenka tinyint) INSERT INTO #OcenkaStudenta(PredmetID,StudentID,Ocenka) VALUES(1,1,5),(1,1,5),(1,1,4), (1,2,3),(1,3,4),(1,4,5),(1,5,3), (2,1,5),(2,1,4),(2,2,2),(2,3,4), (2,4,4),(2,6,2) GO ;WITH t1 AS ( SELECT os.StudentID,p.PredmetName, os.Ocenka FROM #Predmet p LEFT JOIN #OcenkaStudenta os ON p.PredmetID = os.PredmetID ) SELECT PredmetName,[1],[2],[3],[4],[5] FROM (SELECT * FROM t1) AS SourceTable PIVOT(
COUNT(StudentID) FOR Ocenka IN ([1],[2],[3],[4],[5]) ) AS PivotTable GO --udalaet wremennie tablizy DROP TABLE #Predmet GO DROP TABLE #OcenkaStudenta GO
Gruß Yury- Предложено в качестве ответа Yury Iwtschenko 29 июля 2010 г. 17:29
- Помечено в качестве ответа Daniil KhabarovModerator 4 августа 2010 г. 11:38
29 июля 2010 г. 17:29 -
через CASE можно
select PredmetName , sum (case when Ocenka = 1 then 1 else 0 end) as [1] , sum (case when Ocenka = 2 then 1 else 0 end) as [2] , sum (case when Ocenka = 3 then 1 else 0 end) as [3] , sum (case when Ocenka = 4 then 1 else 0 end) as [4] , sum (case when Ocenka = 5 then 1 else 0 end) as [5] from #Predmet p LEFT JOIN #OcenkaStudenta os on p.PredmetID = os.PredmetID group by PredmetName
http://www.t-sql.ru- Предложено в качестве ответа Alexey KnyazevEditor 2 августа 2010 г. 6:48
- Помечено в качестве ответа Daniil KhabarovModerator 4 августа 2010 г. 11:38
2 августа 2010 г. 6:48Отвечающий
Все ответы
-
Читайте про оператор PIVOT.27 июля 2010 г. 10:09
-
через CASE можно
http://www.t-sql.ru27 июля 2010 г. 13:47Отвечающий -
Уважаемый Alex Kuznetsov,
посмотрите вот тут и тут. Вроде даже с примерами разобрано. Как продвигается решение проблемы?
Daniil Khabarov, MSFT
Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
Посетите Блог Инженеров28 июля 2010 г. 10:02Модератор -
--Podgotawliwaet dannie CREATE TABLE #Predmet (PredmetID tinyint identity(1,1), PredmetName varchar(56)) INSERT INTO #Predmet(PredmetName) VALUES('Matematika'),('Physika') GO CREATE TABLE #OcenkaStudenta (OcenkaStudentaID int identity(1,1), PredmetID tinyint, StudentID int, Ocenka tinyint) INSERT INTO #OcenkaStudenta(PredmetID,StudentID,Ocenka) VALUES(1,1,5),(1,1,5),(1,1,4), (1,2,3),(1,3,4),(1,4,5),(1,5,3), (2,1,5),(2,1,4),(2,2,2),(2,3,4), (2,4,4),(2,6,2) GO ;WITH t1 AS ( SELECT os.StudentID,p.PredmetName, os.Ocenka FROM #Predmet p LEFT JOIN #OcenkaStudenta os ON p.PredmetID = os.PredmetID ) SELECT PredmetName,[1],[2],[3],[4],[5] FROM (SELECT * FROM t1) AS SourceTable PIVOT(
COUNT(StudentID) FOR Ocenka IN ([1],[2],[3],[4],[5]) ) AS PivotTable GO --udalaet wremennie tablizy DROP TABLE #Predmet GO DROP TABLE #OcenkaStudenta GO
Gruß Yury- Предложено в качестве ответа Yury Iwtschenko 29 июля 2010 г. 17:29
- Помечено в качестве ответа Daniil KhabarovModerator 4 августа 2010 г. 11:38
29 июля 2010 г. 17:29 -
через CASE можно
select PredmetName , sum (case when Ocenka = 1 then 1 else 0 end) as [1] , sum (case when Ocenka = 2 then 1 else 0 end) as [2] , sum (case when Ocenka = 3 then 1 else 0 end) as [3] , sum (case when Ocenka = 4 then 1 else 0 end) as [4] , sum (case when Ocenka = 5 then 1 else 0 end) as [5] from #Predmet p LEFT JOIN #OcenkaStudenta os on p.PredmetID = os.PredmetID group by PredmetName
http://www.t-sql.ru- Предложено в качестве ответа Alexey KnyazevEditor 2 августа 2010 г. 6:48
- Помечено в качестве ответа Daniil KhabarovModerator 4 августа 2010 г. 11:38
2 августа 2010 г. 6:48Отвечающий