2015-03-19 3 views
-1

Я не могу найти проблему. У меня много таблиц, соединенных друг с другом. Мне нужно получить количество экземпляров формы из таблицы FormInstances (должно быть указано в столбце Id), но оно хранит неверные данные.SQL. Неверный результат функции COUNT()

Так что мой запрос выглядит следующим образом:

DECLARE @dateStart DATE  = NULL, 
@dateEnd  DATE   = NULL, 
@workshop  NVARCHAR(60) = '', 
@shiftNr  NVARCHAR(60) = '', 
@article  NVARCHAR(60) = '', 
@controllier NVARCHAR(60) = 'Name of Controlier' 

SELECT COUNT(FI.Id) AS [Count of Instances] 
FROM FormInstances AS FI 
LEFT JOIN FormFields  AS FF 
    ON FI.FormVersionId = FF.FormVersionid 
LEFT JOIN ..... 
WHERE 
FF.Id    = FV.FormFieldId  AND 
FI.Id    = ... 

ВЫХОД ДЛЯ ТЕПЕРЬ:

Count of Instances 
    414400 
    414400 
    414400 
    414400 
    384800 

вывод должен быть:

Count of Instances 
     5 

Если я перехожу к ВЫБРАТЬ пункт: FI.Id (Id столбец от FormInstances стол) в следующем:

SELECT COUNT(FI.Id) AS [Count of Instances], 
      FI.Id AS [Instance Ids] 
FROM.... 

я правильно Instance Ids, но то же самое, неправильный подсчет экземпляров:

Count of Instances Instance Ids 
     414400    23 
     414400    24 
     414400    25 
     414400    26 
     384800    52 

Так почему это возвращение неправильный подсчет экземпляров?

+0

Что вы пытаетесь считать в FormInstances? если вы используете счетчик и первичный ключ, вы всегда будете 1. – Juan

+0

Я хочу получить счет 'Id' из таблицы' FormInstances' в зависимости от этого предложения WHERE. –

+0

Может быть, это счет id of forminstances как внешний ключ в другой таблице? Если это правильно, переместите счетчик в другую таблицу с этой информацией. – Juan

ответ

7

Вы делаете соединение, которое умножает количество записей. Попробуйте использовать отчетливый в счете для удаления дубликатов:

COUNT(distinct FI.Id) 
+0

@ Stanislovas Kalašnikovas вы группируете FI.Id где-то случайно? Вышеуказанное должно сделать это – NickyvV

+0

OMG действительно я пропустил, что здесь группируются. Спасибо. –

2

Если вы просто хотите получить:

Count of Instances 
     5 

Вы должны изменить:

SELECT COUNT(FI.Id) AS [Count of Instances], 
      FI.Id AS [Instance Ids] 
FROM.... 

Для этого:

SELECT COUNT(*) AS [Count of Instances] 
FROM.... 

Но я не вижу, как e вы можете отправить результаты, которые, как вы говорите, получаете, поэтому я думаю, что вы, вероятно, допустили ошибку в вопросе.

+0

'SELECT COUNT (*) AS [Count of Instances]' возвращает то же, что и 'SELECT COUNT (FI.Id) AS [Count of Instances]' –

+0

Пожалуйста, разместите образцы данных. Я не думаю, что ваш запрос может вернуть результаты, которые вы говорите. –

Смежные вопросы