Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
Добрый день! Для того, чтобы описать проблему с которой столкнулся на работе в начале своих разгребаний с SSRS2012 я предлагаю такой пример (в любой базе): CREATE TABLE dbo.Students ( FirstName nvarchar(15) NOT NULL, LastName nvarchar(15) NOT NULL, Sex bit NOT NULL, Age smallint NOT NULL, Balance money NOT NULL DEFAULT 0 ) INSERT INTO dbo.Students (FirstName, LastName, Sex, Age, Balance) Values ('Alex', 'Morgan', 1, 21, -15.00), ('Thomas', 'Rand', 1, 16, 300.00), ('Helen', 'Hudson', 0, 18, 157.00), ('Olga', 'Stomp', 0, 25, -2.00), ('Polina', 'Kiseleva', 0, 17, 240.00) SELECT * FROM Students --пока всё --Задача состоит в том, чтобы посчитать общее кво студентов и одновременно посчитать посчитать, сколько их имеет отрицательный баланс - всё это сгруппировать по полу --Как ни крутил запрос, пытался сделать вложенный - ничего не получалось, получалось только два отдельных запроса: SELECT Sex, Count (*) as 'Кво (общ)' FROM Students GROUP BY Sex SELECT Sex, Count (*) as 'Кво (отр. баланс)' FROM Students WHERE Balance < 0 GROUP By Sex В первом запросе подсчитываются все студенты по полу, во втором - только те, которые имеют отрицательный баланс. Но для вывода в отчётe SSRS нужен один. Также думал, что в Reporting Services, можно попробовать сделать, но там два запроса приходится разбивать на два разных источника данных и программа ругается, что можно использовать только один. На выходе нужна вот такая таблица: Sex Кво (общ) Кво (отр. баланс) 0 3 1 1 2 1 Прошу помочь разобраться - я в этом деле новичек и самоучка, так что возможно просто чего-то не знаю... Заранее благодарю! |
21 июн 15, 13:10 [17799113] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
SELECT Sex, Count (*) as 'Кво (общ)', sum(case when Balance < 0 then 1 else 0 end) as 'Кво (отр. баланс)' FROM Students GROUP BY Sex |
21 июн 15, 13:18 [17799122] Ответить | Цитировать Сообщить модератору |
ЦБ Member [заблокирован] Откуда: Сообщений: 2773 |
MonoQuad, Sum(case when <твоё условие> then 1 end) |
21 июн 15, 13:19 [17799123] Ответить | Цитировать Сообщить модератору |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
invm, крутяк |
21 июн 15, 13:41 [17799148] Ответить | Цитировать Сообщить модератору |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
invm, мдеее, а задача на работе оказалась по-сложнее - там надо посчитать количество УНИКАЛЬНЫХ строк |
22 июн 15, 17:01 [17802858] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
|
||
22 июн 15, 17:12 [17802902] Ответить | Цитировать Сообщить модератору |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
ЦБ, добавь, плз, к этому всему вот такое (а-ля "Оля имеет еще одну запись об отрицательном балансе): INSERT INTO dbo.Students (FirstName, LastName, Sex, Age, Balance) Values ('Olga', 'Stomp', 0, 25, -10.00) SELECT Sex, Count (*) as 'Кво (общ)', sum(case when Balance < 0 then 1 else 0 end) as 'Кво (отр. баланс)' FROM Students GROUP BY Sex В итоге получится, что две студентки имеют отрицательный баланс Sex Кво (общ) Кво (отр. баланс) 0 4 2 1 2 1 но на самом деле она одна - как её посчитать теперь как одну??? |
22 июн 15, 18:08 [17803105] Ответить | Цитировать Сообщить модератору |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
iap, вот пример: добавь, плз, к этому всему вот такое (а-ля "Оля имеет еще одну запись об отрицательном балансе): INSERT INTO dbo.Students (FirstName, LastName, Sex, Age, Balance) Values ('Olga', 'Stomp', 0, 25, -10.00) SELECT Sex, Count (*) as 'Кво (общ)', sum(case when Balance < 0 then 1 else 0 end) as 'Кво (отр. баланс)' FROM Students GROUP BY Sex В итоге получится, что две студентки имеют отрицательный баланс Sex Кво (общ) Кво (отр. баланс) 0 4 2 1 2 1 |
22 июн 15, 18:09 [17803107] Ответить | Цитировать Сообщить модератору |
MonoQuad Member Откуда: Kiev Сообщений: 11 |
но реально она одна |
||
22 июн 15, 18:10 [17803114] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |