Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сумма строк одной таблицы по разным условиям  [new]
Chpoki
Member

Откуда:
Сообщений: 3
Добрый день, подскажите, пожалуйста решение.
Есть две таблицы в каждой из которых несколько разных типов записей.
В первой таблице два типа записей. Во второй таблице три типа записей.
Нужно в одном запросе получить:
1. По типу записей №1 из таблицы №1 сумма записей типа записей №1 из таблицы №2.
2. По типу записей №1 из таблицы №1 сумма записей типа записей №2 из таблицы №2.
3. По типу записей №1 из таблицы №1 сумма записей типа записей №3 из таблицы №2.
4. По типу записей №2 из таблицы №1 сумма записей типа записей №1 из таблицы №2.
5. По типу записей №2 из таблицы №1 сумма записей типа записей №2 из таблицы №2.
6. По типу записей №2 из таблицы №1 сумма записей типа записей №3 из таблицы №2.
Пытался использовать запрос например:
SELECT COUNT(distinct CASE WHEN (A.Type = '1' AND B.Type = '1' ) then '1' ELSE NULL END) AS 'Тип 1'
FROM Table1 AS A
JOIN Table2 B
ON A.Id=B.Id

но не хватает навыков и знаний.
Заранее спасибо!
3 авг 19, 11:58    [21941127]     Ответить | Цитировать Сообщить модератору
 Re: Сумма строк одной таблицы по разным условиям  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36506
Пункт 4 и пункт 6
3 авг 19, 17:16    [21941239]     Ответить | Цитировать Сообщить модератору
 Re: Сумма строк одной таблицы по разным условиям  [new]
Chpoki
Member

Откуда:
Сообщений: 3
Chpoki,Microsoft SQL Server Management Studio 14.0.17177.0
Использую скрипт:
SELECT A.Name, CASE WHEN B.Type=3 then '3' WHEN B.Type=2 then '2' END as 'Тип', COUNT(distinct C.Id),
CASE WHEN T.ModelId = 1 then COUNT(distinct T.Id)END as '1',
CASE WHEN T.ModelId = 2 then COUNT(distinct T.Id)END as '2',
CASE WHEN T.ModelId = 3 then COUNT(distinct T.Id)END as '3'
FROM [Table1] AS A
LEFT JOIN [Table2] AS B
LEFT JOIN [Table3] AS C
WHERE B.Type='3' OR B.Type='2' AND C.ModelId like '1' OR C.ModelId like '2' OR C.ModelId like '3'
GROUP BY A.Name, B.Type, C.ModelId
ORDER BY A.Name ASC
В результате должен быть список имен (A.Name) которые бывают двух типов (B.Type 2 и B.Type 3) с указанием суммы единиц каждой модели, всего три (T.ModelId) и если нет, то пусто.
3 авг 19, 20:37    [21941290]     Ответить | Цитировать Сообщить модератору
 Re: Сумма строк одной таблицы по разным условиям  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2941
Chpoki,
Бог его знает, что Вам надо.
Вот для начала
SELECT 
	A.Name
	, A.Type
	, B.Type
	, Count(*)
FROM 
	Table1 AS A
JOIN Table2 B ON A.Id=B.Id
Group By
	A.Name
	, A.Type
	, B.Type
5 авг 19, 08:11    [21941815]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить