我的数据库中有两个表,一个是Syncbill
,另一个是Paymentmode
中的Syncbill
。我有几个列代表付款类型,例如现金,Paytm和其他是Otherpayment1
,OtherPayment2
等。
我在我的数据库中还有一个名为paymentmode
的表,其中其他付款模式名称被定义为OtherPayment1
被定义为swiggy那里。
表同步
表Paymentmode
结果表/输出
我试图通过查询完成它
我面临的问题是:
Paymentmode
表中有四列命名为Position
,Paymentcode
,Paymentname
和IsActive
,其中position定义为1,2,3,4等等,所以这些1,2,3 ......和其他表Otherpayment1
,Otherpayment2
..这里1,2,3是定义付款方式Otherpayment1
的地方,我想要在位置1的其他表(Paymentmode
)中的内容Paymentmode
我有一个列IsActive
所以我想只得到那些有PaymentNames
的IsActive='Y'
我之前做的是:
我正在写这个查询:
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所有这些都是硬编码的。
这可以通过使用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