未付月薪(mysql + vb.net)

时间:2018-06-06 15:03:27

标签: mysql vb.net select

我有一个类似于MySQL的表格

NAME  salary amount   month 1   month 2  month 3  month 4
john  300             300       300      0        0
maria 400             400       0        0        0 
tom   380             380       380      380      0

我想在表格或列表视图中看到结果或类似的结果

name    unpaid month    salary amount
john     month 3        300
john     month 4        300
maria    month 2        400
maria    month 3        400
maria    month 4        400
tom      month 4        380

我尝试过代码:

sql1="select name,month1 from table where month1=0 "
 sql2="select name,month2 from table where month2=0"
 sql3="select name,month3 from table where month3=0"
sql4="select name,month4 from table where month4=0"
Dim Sql = String.Concat(sql1, ";", sql2 ,";",sql2,";",sql4 )

但没有工作,有任何帮助吗?

3 个答案:

答案 0 :(得分:0)

尝试使用UNION mysql聚合:

sql1="select name,month1 as unpaid_month from table where month1=0 "
sql2="select name,month2 as unpaid_month from table where month2=0"
sql3="select name,month3 as unpaid_month from table where month3=0"
sql4="select name,month4 as unpaid_month from table where month4=0"
Dim Sql = String.Concat(sql1, " UNION ", sql2 ,"UNION ",sql2," UNION ",sql4 

答案 1 :(得分:0)

您的代码中的语法看起来有些偏差。我不知道这是否是您的程序中的确切代码,但是当SQL语句格式不正确时,不会发生任何事情。我做了一些改变以显示可能存在的问题。

sql1="SELECT name, month1, amount FROM table WHERE month1=0"
sql2="SELECT name, month2, amount FROM table WHERE month2=0"
sql3="SELECT name, month3, amount FROM table WHERE month3=0"
sql4="SELECT name, month4, amount FROM table WHERE month4=0"
Dim Sql = String.Concat(sql1, ";", sql2 ,";",sql2,";",sql4 )

我在您当前的格式中看到的问题是,您可能希望为名称和付款设置两个单独的表。使用单独的表,您可以使用外键并加入两个表,以便每个月都有每个月的名称和当月支付的金额。您还可以使用GROUP BY

根据用户名对用户进行分组

使用重组后的表格,您的电话会像下面的语句一样简单。由于我不知道你的表名,我为他们制作了假名。

Dim Sql = "SELECT NameTable.name, MonthTable.month, MonthTable.amount 
           FROM NameTable INNER JOIN MonthTable
           ON {prmarykey for name} = {foreign key for month}
           GROUP BY NameTable.name"

这应该会给你你想要的结果。如果您有任何问题或需要澄清,请与我们联系。

答案 2 :(得分:0)

如何在列名前使用空格。

我建议您使用UNION

但是,这是SQL的最小版本;

sql = "SELECT NAME, month1 as unpaid_month, salary_amount FROM tablename WHERE month1 = 0"
sql = sql & " UNION "
sql = sql & "SELECT NAME, month2 as unpaid_month, salary_amount FROM tablename WHERE month2 = 0"
sql = sql & " UNION "
sql = sql & "SELECT NAME, month3 as unpaid_month, salary_amount FROM tablename WHERE month3 = 0"
sql = sql & " UNION "
sql = sql & "SELECT NAME, month4 as unpaid_month, salary_amount FROM tablename WHERE month4 = 0"

但是,查询不够好。如果有人领到薪水的一半,会发生什么。为什么你应该为一个人获得多个记录?不应该为salary_amount和unpaid_month的字符串连接有任何SUM吗?

由于这不是你问题的一部分,我不能在这里发布高级SQL。如果你愿意,请在评论中提出要求。

请使用临时表SUM()阅读这些功能GROUP_CONCAT()AS TABLE。我认为你应该使用它们进行良好的编程。