每当遇到以数据为中心的问题(与以Java域模型为中心的问题相对)时,都应直接使用SQL。您的数据库将比Java代码快得多,因为可以对数据进行紧密的计算,而不必通过导线将其全部传输到内存中。另请参阅本博客文章“
2.处理内存中的数据”。
您可以直接使用JDBC,本地查询或您选择的任何第三方SQL库(例如MyBatis或jOOQ)来实现。
您可以使用以下任一查询轻松解决您的问题:
使用GROUP BY
SELECt [AppID], [DocStatus], count(*)FROM [MyTable]GROUP BY [AppID], [DocStatus]
SQLFiddle上的示例
使用嵌套选择
SELECt [AppID], (SELECT count(*) FROM [MyTable] [t2] WHERe [t1].[AppID] = [t2].[AppID] AND [DocStatus] = 0) [Status_0], (SELECt count(*) FROM [MyTable] [t2] WHERe [t1].[AppID] = [t2].[AppID] AND [DocStatus] = 1) [Status_1]FROM [MyTable] [t1]GROUP BY [AppID]
SQLFiddle上的示例
使用SUM()
SELECt [AppID], SUM(IIF([DocStatus] = 0, 1, 0)) [Status_0], SUM(IIF([DocStatus] = 1, 1, 0)) [Status_1]FROM [MyTable] [t1]GROUP BY [AppID]
SQLFiddle上的示例
使用PIVOT
SELECt [AppID], [0], [1]FROM ( SELECt [AppID], [DocStatus] FROM [MyTable]) [t]PIVOT (count([DocStatus]) FOR [DocStatus] IN ([0], [1])) [pvt]
SQLFiddle上的示例



