Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
MonoQuad,

Sum(case when <твоё условие> then 1 end)
21 июн 15, 13:19    [17799123]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
MonoQuad
Member

Откуда: Kiev
Сообщений: 11
invm, крутяк
21 июн 15, 13:41    [17799148]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
MonoQuad
Member

Откуда: Kiev
Сообщений: 11
invm, мдеее, а задача на работе оказалась по-сложнее - там надо посчитать количество УНИКАЛЬНЫХ строк
22 июн 15, 17:01    [17802858]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
MonoQuad
invm, мдеее, а задача на работе оказалась по-сложнее - там надо посчитать количество УНИКАЛЬНЫХ строк
Уникальных по всем полям?
22 июн 15, 17:12    [17802902]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Агрегация с разными условиями для сведения в одну таблицу  [new]
MonoQuad
Member

Откуда: Kiev
Сообщений: 11
MonoQuad
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:10    [17803114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить