2

DAO クラスの 2 つの異なる選択クエリを 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

1 つのリストで 2 つのクエリを取得するのを手伝ってくれませんか。

4

2 に答える 2

1

私の観点からは、次の 2 つの可能性があります。


コレクションのマージ

アイデアは、両方のクエリを実行し、両方の結果を 1 つのリストに追加することです。

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

SQL ユニオン

SQL Union の場合、結果リスト全体を取得するために使用される 1 つのクエリがあります。やり方はこちらで確認できます

あなたの場合、次のようなことはできませんでした:

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 ソリューションは、データベースに 1 回クエリを実行するだけで問題を解決するため、時間を投資します。

ここでデモを見ることができます: 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

私の構文を許してください[私はオラクルで働いています]

于 2013-04-18T06:29:23.070 に答える