未付月薪(mysql+vb.net)

fquxozlt  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(224)

我有一个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 )

但没用,请帮忙?

nlejzf6q

nlejzf6q1#

尝试联合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
w8rqjzmb

w8rqjzmb2#

如何在列名之前使用空格。
我建议你用 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"

但是,这个查询还不够好。如果有人拿了一半的薪水会怎么样。为什么一个人要有多张唱片?不应该有工资金额和未付月份的字符串连接的总和吗?
因为这不是你的问题,我不能在这里发布高级sql。如果你想要的话,请在评论中询问。
请阅读这些函数 SUM() 以及 GROUP_CONCAT() 带临时桌 AS TABLE . 我认为你应该用它们来编写好程序。

zbq4xfa0

zbq4xfa03#

在您现在的代码中,语法看起来有点不对劲。我不知道这是否是您程序中的确切代码,但是当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"

这应该给你的结果,你正在寻找。如果您有任何问题或需要澄清,请告诉我。

相关问题