Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Count(*), Group by при подсчете значений с использованием Cross join  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 520
Добрый день, коллеги!
Есть таблица дефектов и таблица типов дефектов:
CREATE TABLE [dbo].[Defects](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[idSmallPart] [int] NOT NULL,
	[idDefectType] [int] NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[DefectTypes](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Panels](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]


Используя cross join я получаю список панелей и количество дефектов, далее мне необходимо высчитать какое количество дефектов было зарегистрировано по каждой зарегистрированной панели.

;with t (did,idSmallPart,PanelName,dtid, dtname, cnt) as 
(select 
 d.id,
 d.idSmallPart,
 p.name,
 dt.id,
 dt.Name 
 ,(select count(*) from Defects de where de.id=d.id and de.idSmallPart=d.idSmallPart and de.idDefectType=dt.id) as cnt
 from Defects d
inner join Panels p on
d.idSmallPart=p.id
cross join DefectTypes dt)


На этом этапе я получаю примерно такую таблицу:
dididSmallPartPanelNamedtid dtname cnt
1377SM1Выпуклость0
1377SM2Вмятина0
1377SM3Разрыв1
257SM1Выпуклость0
257SM2Вмятина1
257SM3Разрыв0


Используя вышеуказанный with пытаюсь посчитать количество значений:
select
	t.PanelName,
	t.dtname
	,t.dtid
	,t.cnt
	,count(*)
from t
group by
	t.PanelName,
	t.dtname
	,t.dtid
	,t.cnt


В результате я получаю следующие результаты:
PanelNamedtnamedtidcntCount
SMВыпуклость102
SMВмятина201
SMВмятина211
SMРазрыв301
SMРазрыв311


Цель:
PanelNamedtnamedtidCount
SMВыпуклость10
SMВмятина21
SMРазрыв31


Что я делаю не так? :(

Спасибо!

Никогда не бойся делать то, что не умеешь.
Помни, профессионалы построили Титаник, а Ковчег любители.
20 мар 17, 12:01    [20313305]     Ответить | Цитировать Сообщить модератору
 Re: Count(*), Group by при подсчете значений с использованием Cross join  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Kast2K,
select
	t.PanelName,
	t.dtname
	,t.dtid
	,SUM(t.cnt)
from t
group by
	t.PanelName,
	t.dtname
	,t.dtid

если я правильно понимаю
20 мар 17, 12:05    [20313328]     Ответить | Цитировать Сообщить модератору
 Re: Count(*), Group by при подсчете значений с использованием Cross join  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 520
TaPaK,
Спасибо!

Слона, то я и не заметил...
20 мар 17, 12:25    [20313426]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить