SELECT f.Line,
q.line,
COUNT(f.Line) AS FTR_count,
COUNT(q.line) AS quantity_count
FROM [work_permit].[dbo].[FTR] f
INNER JOIN [work_permit].[dbo].[quantity] q ON f.Line = q.line
GROUP BY f.Line,
q.line;
Я хочу FTR_count
вернуть количество строк, присутствующих в таблице FTR
. Точно так же я хочу, чтобы quantity_count
вернул количество строк, присутствующих в таблице Quantity
. Он этого не делает.
Пожалуйста, помогите мне исправить этот запрос.
Когда я запускаю его, я получаю неверные значения для FTR_count
и quantity_count
.
Мне задали примерные данные и желаемые результаты. Поэтому я привожу здесь примерные данные.
count(distinct ...
?? Показать некоторые примеры данных и желаемые результаты
@DaleK Different дает значение 1. Столбец строки присутствует как в таблицах FTR, так и в количестве. Я хочу, чтобы общее количество строк присутствовало в таблицах FTR и Quantity отдельно. Чтобы рассчитать построчно, я добавил предложение group by. Это не помогает.
Нам нужны образцы данных и желаемые результаты.
@DaleK Я добавил примеры данных. Пожалуйста, проверьте.
Вам нужно предварительно агрегировать. Здесь у вас есть отношение один ко многим или, исходя из того, что оба столбца «неправильные», отношение многие ко многим.
Таким образом, вам необходимо убедиться, что вы предварительно агрегируете одну сторону, чтобы вы добавляли только одну строку и, следовательно, не «раздували» число.
Одним из способов добиться этого является производная таблица:
SELECT f.Line,
--q.line, --Both lines are the same, so why repeat it?
COUNT(f.Line) AS FTR_count,
MAX(q.quantity_count) AS quantity_count --using MAX so we don't need to pop it in the GROUP BY
FROM [dbo].[FTR] f
INNER JOIN(SELECT q.Line,
COUNT(q.Line) AS quantity_count
FROM [dbo].[quantity] q
GROUP BY q.Line) q ON f.Line = q.line
GROUP BY f.Line;
--q.line;
Похоже, вам нужна предварительная агрегация.