2

我试图在 DAO 类中获取两个不同的选择查询作为 java 中的单个列表。

public List<SBCDocumentDetailsVO> getsBCDetails() throws DataAccessException, SQLException{
List<SBCDocumentDetailsVO> sbcDocList = new ArrayList<SBCDocumentDetailsVO>();


MapSqlParameterSource namedParameter = new MapSqlParameterSource();

//using NamedParameterJdbcTemplate for querying
sbcDocList = this.getNamedParameterJdbcTemplate().query(
        sbcDetailsQuery, namedParameter,
        new sBCDetailsMapper());
return sbcDocList;

}

我的选择查询是

SELECT State, marketId, COUNT(marketId)
FROM BatchReport
GROUP BY State, marketID


SELECT
SUM(CASE marketID WHEN 'in' THEN 1 ELSE 0 END) AS totalCountInd 
,SUM(CASE marketID WHEN 'gr' THEN 1 ELSE 0 END) AS totalCountGrp
FROM BatchReport

任何人都可以帮助我在一个列表中获取 2 个查询。

4

2 回答 2

1

从我的角度来看,您有两种可能性:


集合合并

这个想法是执行两个查询并将两个结果添加到一个列表中:

...
List result = new ArrayList();
result.addAll(firstQuery());
result.addAll(secondQuery());
...

SQL 联合

对于 SQL Union,您将有一个查询用于检索整个结果列表。您可以在此处查看如何操作

在你的情况下,你不能做这样的事情:

SELECT 
   State, 
   marketId, 
   COUNT(marketId) 
FROM 
   BatchReport 
GROUP BY 
   State, 
   marketID 
UNION
SELECT 
   'Total', 
   SUM(CASE marketID WHEN 'in' THEN 1 ELSE 0 END) AS totalCountInd,
   SUM(CASE marketID WHEN 'gr' THEN 1 ELSE 0 END) AS totalCountGrp 
FROM BatchReport

我会花时间在 SQL UNION 解决方案上,因为它通过查询数据库一次来解决问题。

你可以在这里看到一个演示http ://sqlfiddle.com/#!2/e5285/1

于 2013-04-18T06:12:36.113 回答
0

简单的方法可以是创建一个查询并创建一个包含所有列的单个 bean。以下查询应该有帮助:

SELECT State, marketId, COUNT(marketId),SUM(CASE marketID WHEN 'in' THEN 1 ELSE 0 END) AS totalCountInd ,SUM(CASE marketID WHEN 'gr' THEN 1 ELSE 0 END) AS totalCountGrp
FROM BatchReport
GROUP BY State, marketID

请原谅我的语法 [我在 oracle 上工作]

于 2013-04-18T06:29:23.070 回答