从DAO类中的单个列表中的两个查询中获取结果

时间:2013-04-18 06:03:23

标签: java mysql spring

我正在尝试将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个查询放在一个列表中。

2 个答案:

答案 0 :(得分:1)

从我的观点来看,你有两种可能性:


收集合并

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

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

SQL UNION

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

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

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解决方案上投入时间,因为它只通过查询一次数据库来解决问题。

您可以在此处看到 DEMO http://sqlfiddle.com/#!2/e5285/1

答案 1 :(得分: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上工作]