ujju.1 Ответов: 1

Получите пропущенные месяцы равными нулю (0) и заполните их в datatable


ПРИВЕТ Вот мой sql-запрос
select Month,count(id) transactions from `tbl_test` where id=" + id + " and Month is not NULL and Year = " + Convert.ToInt32(currentYear) + " group by Month;


Месяц-это varchar, а id-int, я использую mysql.

Заполнение его в DataTable
DataTable dt = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);


Результат, который я получаю, похож на
Month transactions 
May     122
December 178

И результат, который я хочу, такой

Month transactions 
January    0
February   0
March      0
April      0
May        122
June       0
July       0
August     0
September  0
October    0
November   0
December   178


Пожалуйста, Помогите

Что я уже пробовал:

Я создал еще одну таблицу со всеми месяцами и пытаюсь присоединиться к 2. Но бесполезно (я думаю, из-за предложения where в SQL-операторе). Пожалуйста, помогите

Что-то вроде этого:
select Month, ifnull(count(id), 0) transactions 
    from `tbl_test` 
    inner join my_month_table  as m on m.month_key = `tbl_test`.month_key 
    where id=" + id + " and Month is not NULL and Year = " + Convert.ToInt32(currentYear) + " 
    group by Month;


Цитата:
PS: Я бы предпочел не менять запрос (1-й без соединения) и не играть с кодировкой переднего плана (C#), чтобы вставить его в DataTable.

Tomas Takac

Я в замешательстве. Итак, вы решили ее с помощью этого дополнительного соединения, но вам не нравится это решение? Так что же вы пытались решить на своем прикладном уровне?

1 Ответов

Рейтинг:
2

Midi_Mick

Если у вас есть таблица со всеми месяцами, выберите из нее основную таблицу и выполните левое соединение. вот так:

select month, ifnull(count(t.id),0) transactions
from my_month_table m
left join 'tbl_test' t on m.month_key=t.month_key
where id=" + id + " and Month is not NULL and Year = " + Convert.ToInt32(currentYear) + "