我的查询有问题

时间:2017-09-25 02:43:41

标签: c# mysql sql database join

我已经创建了一个简单的数据库应用程序但是我在添加一个最终的列时遇到了问题。金额列需要使用PRODUCTS表中的Yearly Premium填充,然后除以1,12或26,具体取决于是按年付(1),每月(12)还是每两周(26)。

我假设我需要使用ProductID加入SALES和PRODUCTS表,但无法弄清楚如何根据付款方式(F / M / Y)填充金额列。

以下是程序中每个表格的两个屏幕截图,以及我目前用于填充主销售表单的代码。

Sales Screen where amount needs to be calculated.

The Yearly premium needs to come from here

private void DisplaySales()
    {
        string selectQuery;
        selectQuery = "SELECT * FROM Sales";
        List<Sale> saleList = new List<Sale>();
        try
        {
            // Automatically  open and close the connection
            using (var conn = ConnectionManager.DatabaseConnection())
            using (var cmd = new SqlCommand(selectQuery, conn))
            using (var rdr = cmd.ExecuteReader())
            {

                while (rdr.Read())
                {
                    //Define the list items
                    var sale = new Sale(
                        int.Parse(rdr["SaleID"].ToString()),
                        int.Parse(rdr["CustomerID"].ToString()),
                        int.Parse(rdr["ProductID"].ToString()),
                        rdr["Payable"].ToString(),
                        DateTime.Parse(rdr["StartDAte"].ToString()));

                    saleList.Add(sale);
                }
                dgvSales.DataSource = saleList;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unsuccessful" + ex);
        }
    }

感谢您对我的问题提供任何帮助。

1 个答案:

答案 0 :(得分:3)

你对加入是对的。

selectQuery = "SELECT * FROM Sales AS Sal INNER JOIN Product AS Pro ON Sal.ProductID = Pro.ProductID

然后有一个语句在你在while循环中得到结果时执行逻辑。

int amount;
switch(rdr["Payable"].ToString()) {
    case "M": amount =         rdr["YearlyPremium"] / 12
    break;
    case "F": amount =     rdr["YearlyPremium"] / 26
    break;
    default: amount =    rdr["YearlyPremium"];
    break;

}

然后将金额添加到销售对象并将其传递给Sale构造函数。 您可以创建自己的枚举或字典以避免switch语句。但是,我建议在插入销售时插入正确的金额。干杯

确保您的Sale类具有此