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

问题描述 投票:1回答:1

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

我在我的数据库中还有一个名为paymentmode的表,其中其他付款模式名称被定义为OtherPayment1被定义为swiggy那里。

表同步

Syncbill

表Paymentmode

Paymentmode

结果表/输出

Result

我试图通过查询完成它

我面临的问题是:

  • 这两个表之间没有关系
  • 我所做的关系是在Paymentmode表中有四列命名为PositionPaymentcodePaymentnameIsActive,其中position定义为1,2,3,4等等,所以这些1,2,3 ......和其他表Otherpayment1Otherpayment2 ..这里1,2,3是定义付款方式
  • 现在我要做的是从两个表中获取数据,但作为Otherpayment1的地方,我想要在位置1的其他表(Paymentmode)中的内容
  • 如表Paymentmode我有一个列IsActive所以我想只得到那些有PaymentNamesIsActive='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'

我的Java servlet我使用resultset.getstring从数据库中获取值,然后将它们存储到List中,然后使用GSON将其转换为JSON

while (resultSet.next()) {
            lhm = new LinkedHashMap<Object, Object>();
            Billdate = resultSet.getString("billdate");
            cash = resultSet.getLong("paytm");
            creditcard = resultSet.getLong("cash");
            swiggy = resultSet.getLong("Swiggy");
            kb = resultSet.getLong("KB");
            bigBasket = resultSet.getLong("BigBasket");
            zomato = resultSet.getLong("Zomato");

            lhm.put("Billdate", Billdate);          
            lhm.put("Paytm", paytm);
            lhm.put("Cash", cash);
            lhm.put("Swiggy", swiggy);
            lhm.put("Kb", kb);
            lhm.put("BigBasket", bigBasket);
            lhm.put("Zomato", zomato);

            mainList.add(lhm);
            str = gson.toJson(mainList);

        }

但是这个不是解决方案,因为我得到KB,Swiggy所有这些都是硬编码的。

java mysql servlets
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.