Часть сущностей базы данных SQL Server являются:Какая часть моего SQL-запроса неверна?
- Формы (Id, счетчик)
- Группы (Id, form_id, счетчик)
- Fields (Id, GROUP_ID, счетчик)
Логика этой структуры:
- Счетчик полей может быть 0 или более
- Счетчик групп зависит от счетчиков полей, которые существуют в этой группе: значение счетчика каждого поля, которое больше 0, увеличивает счетчик группы на один
- Та же связь существует между группой и формой: счетчик формы - это сумма счетчики в группы, которые выше, чем 0
небольшой пример для лучшего понимания:
Form A1 (Counter: 1)
|-> Group BB1 (Counter: 2)
|-> Field CCC1 (Counter: 2)
|-> Field CCC2 (Counter: 1)
|-> Group BB2 (Counter: 0)
|-> Field CCC3 (Counter: 0)
|-> Field CCC4 (Counter: 0)
Form A2
...
Некоторые поля содержит недопустимые значения, что мой запрос нужно проверить. Но я не могу написать это правильно. Последняя версия этого:
select distinct
cd.Id as [FormID],
sum (case when cd.Counter > 0 then 1 else 0 end) over (partition by cd.Id, gd.Id, fd.Id) as [FormSum],
cd.Counter as [FormVal],
gd.Id as [GroupID],
sum(case when gd.Counter > 0 then 1 else 0 end) over (partition by cd.Id, gd.Id, fd.Id) as [GroupSum],
gd.Counter as [GroupVal],
fd.Id as [FieldID],
--sum(case when fd.Counter > 0 then 1 else 0 end) over (partition by cd.Id, gd.Id) as [FieldSum],
fd.Counter as [FieldVal]
from FieldDatas fd
inner join GroupDatas gd on fd.GroupData_Id = gd.Id
inner join CrfDatas cd on gd.CrfData_Id = cd.Id
where cd.Id in
(
-- some subquery
)
order by cd.Id, gd.Id, fd.Id
Update:
Этот запрос должен сравнить сохраненные данные Счетчики во всех субъектах с запросом рассчитанным значениями, и зафиксировать эти значения в будущем.
Будем рады любой помощи.
ddl и данные примера вместе с четким объяснением того, что вы хотите, чтобы ваш запрос выполнял долгий путь, чтобы получить ответ. sqlfiddle.com - отличное место для начала. –