我正在尝试将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个查询放在一个列表中。
答案 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上工作]