如何将两个表的数据合而为一?

时间:2019-04-12 06:32:37

标签: java mysql servlets

我的数据库中有两个表,一个是Syncbill,另一个是Paymentmode。我有几列代表付款类型,例如现金,Paytm,其他是SyncbillOtherpayment1,依此类推。

我的数据库中还有一个名为OtherPayment2的表,其中定义了其他付款方式名称,例如paymentmode在那里很呆。

表同步表

Syncbill

表付款方式

Paymentmode

结果表/输出

Result

我想知道查询是否完成

我面临的问题是:

  • 这两个表之间没有关系
  • 我在OtherPayment1表中建立的关系有四列分别命名为PaymentmodePositionPaymentcodePaymentname,其中位置定义为1,2,3,4,依此类推,所以这些1,2,3 ...以及其他表格IsActiveOtherpayment1 ..此处1,2,3定义了付款方式
  • 现在我想做的是从两个表中获取数据,但是作为Otherpayment2的位置,我想在其他表(Otherpayment1)中的位置1

  • 如表Paymentmode所示,我有一列Paymentmode,所以我只想获取具有IsActive

  • 的那些PaymentNames
  • 我不知道该怎么做,我发布此消息是为了获得类似该如何做的方法,它可以通过查询本身来完成,或者我必须使用服务器端语言使用Java-Servlet作为服务器端语言

我之前在做什么:

我正在编写此查询:

IsActive='Y'

我是我的Java servlet,我正在使用 SELECT billdate,SUM(paytm) paytm,SUM(cash) cash, SUM(otherpayment1) Swiggy, SUM(otherpayment2) KB,SUM(otherpayment3) BigBasket,SUM(otherpayment4) Zomato FROM syncbill WHERE a.BILLDATE BETWEEN '2018-08-05' AND '25018-08-10' 从数据库中获取值,然后将其存储到List中,然后使用resultset.getstring这样将其转换为JSON

GSON

但是这不是解决方案,因为我正在获取KB,将所有这些都硬编码。

1 个答案:

答案 0 :(得分:1)

这可以通过使用2个sql查询来完成

//to convert row on Paymentmode table into column name of syncbill table
    String q1 = "select concat('OTHERPAYMENT',p) as op from Paymentmode where IsActive=Y"; 
    rs = stmt.executeQuery(q1); 
    String str = ""; 
    while(rs.next()) {   
    str += rs.getString(1) + ","; 
    }
//to get desired result
    String q2 = "select Paytm, Cash," + str.substring(0, str.length()-1) +" from syncbill";

// below this execute q2