我有一个类似于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 )
但没有工作,有任何帮助吗?
答案 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
。我认为你应该使用它们进行良好的编程。