У меня есть запрос в Oracle для отображения количества транзакций в час, затем в последнем столбце отображается сумма для всех часов. Запрос отлично работает в SQL-разработчике.
Однако, когда я пытаюсь отобразить результаты в виде таблицы моего приложения Windows Form, я получаю 0 для всех часовых данных. Однако я получаю итоговую сумму.
Впервые у меня возникли проблемы с использованием средства выбора даты и отображением данных в виде таблицы.
Вот скриншот результатов в SQL-разработчике (я понимаю, что итоговый столбец не равен сумме показанных столбцов. На снимке экрана показаны не все столбцы.)
А вот скриншот с теми же данными в оконных формах.
Это то, что я считаю соответствующим кодом SQL. Пожалуйста, прости меня, если это слишком много.
SELECT
user_name,
SUM(CASE
WHEN substr(hr,11) = '19:00:00' THEN t
ELSE 0
END) AS eight_pm,
SUM(CASE
WHEN substr(hr,11) = '20:00:00' THEN t
ELSE 0
END) AS nine_pm,
SUM(CASE
WHEN substr(hr,11) = '21:00:00' THEN t
ELSE 0
END) AS ten_pm,
SUM(CASE
WHEN substr(hr,11) = '22:00:00' THEN t
ELSE 0
END) AS eleven_pm,
SUM(t) total
FROM
(
SELECT
user_name,
COUNT(*) t,
TO_CHAR(trunc(last_update_date,'HH24') ) AS hr
FROM
cte
GROUP BY
user_name,
TO_CHAR(trunc(last_update_date,'HH24') )
)
GROUP BY
user_name
ORDER BY
user_name
Я ничего не делаю со средством выбора даты, кроме использования его в качестве параметра для запроса данных. При необходимости я могу показать пользовательский формат или код C #.
Пожалуйста, обратите внимание, я не смогу проверить какие-либо решения до завтрашнего утра.
Спасибо за ваше время.
Обновление
Добавление кода для заполнения таблицы данных:
private void btnSecondShiftStats_Click(object sender, EventArgs e)
{
var start = startDatePicker.Value;
var end = endDatePicker.Value;
string name = tbName.Text;
dvgSecondShiftStats.DataSource = _secondShiftStatsData.GetStats(start, end, name);
}
Метод GetStats:
public List<SecondShiftStats> GetStats(DateTime fromDate, DateTime toDate, string uName)
{
var statList = new List<SecondShiftStats>();
var conString = ConfigurationManager.ConnectionStrings["SecondShiftStatsConnection"].ConnectionString;
using (OracleConnection con = new OracleConnection(conString))
{
string sql = @"WITH loaded AS (
SELECT...";
using (OracleCommand cmd = new OracleCommand(sql, con))
{
cmd.Parameters.Add(new OracleParameter(":start_time", OracleDbType.Date)).Value = fromDate;
cmd.Parameters.Add(new OracleParameter(":end_time", OracleDbType.Date)).Value = toDate;
cmd.Parameters.Add("name", uName);
con.Open();
using (OracleDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var stats = new SecondShiftStats();
stats.USER_NAME = reader["USER_NAME"].ToString();
stats.THREE_PM = Convert.ToInt32(reader["THREE_PM"]);
stats.FOUR_PM = Convert.ToInt32(reader["FOUR_PM"]);
stats.FIVE_PM = Convert.ToInt32(reader["FIVE_PM"]);
stats.SIX_PM = Convert.ToInt32(reader["SIX_PM"]);
stats.SEVEN_PM = Convert.ToInt32(reader["SEVEN_PM"]);
stats.EIGHT_PM = Convert.ToInt32(reader["EIGHT_PM"]);
stats.NINE_PM = Convert.ToInt32(reader["NINE_PM"]);
stats.TEN_PM = Convert.ToInt32(reader["TEN_PM"]);
stats.ELEVEN_PM = Convert.ToInt32(reader["ELEVEN_PM"]);
stats.TOTAL = Convert.ToInt32(reader["TOTAL"]);
statList.Add(stats);
}
}
}
}
return statList;
}