Группировка по sql серверу и присоединение - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 2 таблицы MonthTable и DetailsTable

MonthTable имеет

+--------+--------+
| MName  |  MNo   |
+--------+--------+
| Jan-20 | 202001 |
| Feb-20 | 202002 |
| Mar-20 | 202003 |
| Apr-20 | 202004 |
+--------+--------+

DetailsTable имеет

+-----+-----------+------------+--------------+
| Did | DCategory |   Ddate    | MonthofDdate |
+-----+-----------+------------+--------------+
| A1  | B1        | 18-03-2020 |       202003 |
| A2  | B2        | 16-04-2020 |       202004 |
| A3  | B3        | 01-04-2020 |       202004 |
| A2  | B4        | 26-03-2020 |       202003 |
| A1  | B5        | 07-03-2020 |       202003 |
| A1  | B6        | 09-04-2020 |       202004 |
+-----+-----------+------------+--------------+

У меня нет данных за январь и февраль.

Мне нужно объединить эти таблицы и группы с помощью Did и Ddate или Monthofddate.

Я пытался сделать, но проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить какие-либо данные для jan и feb! Я оставил присоединиться. Мне нужен выход, где я могу получить значение 0 для числа дел за январь и февраль.

Ожидаемый результат

+-----+-------+--------+
| Did | count |  Mno   |
+-----+-------+--------+
| A1  |     0 | 202001 |
| A1  |     0 | 202002 |
| A1  |     2 | 202003 |
| A1  |     1 | 202004 |
+-----+-------+--------+

и т. Д. *

Это все равно достижимо?

1 Ответ

0 голосов
/ 28 апреля 2020

Имеет смысл, что вы не можете получить 0 для записей 'A1'

Вы пытаетесь сделать JOIN для таблицы (DetailsTable), у которой нет 'A1 'запись за 202001, 202002. Так что нечего сопоставлять, поэтому вы не получите счет 0, а значение null вместо Did.

Случай будет другим, если в вашей таблице MonthTable была запись Did.

Вместо этого вы могли бы

SELECT mt.MName, COUNT(dt.Mno), mt.MNo FROM MonthTable mt LEFT JOIN DetailsTable dt on mt.MNo = dt.MonthofDdate -- where dt.did = 'A1' GROUP BY mt.MName, mt.MNO

Если вы все еще хотите дифференцировать по Did, вы можете добавить его в оператор выбора и GROUP By.

Если вы закомментируете оператор WHERE, вы увидите, что я пытался объяснить Вы.

Я думаю, что вы должны следовать рекомендациям Date, а также это не очень хороший дизайн таблицы, так как вы не должны делать JOIN с VARCHAR переменными

...