27,582
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE test1 (ID INT, FromID INT, ToID INT, IsNew VARCHAR(20))
INSERT INTO test1
SELECT 1,103, 102,'true' UNION ALL
SELECT 2,102, 103,'false' UNION ALL
SELECT 3,103, 102,'true' UNION ALL
SELECT 4,104, 102,'true' UNION ALL
SELECT 5,105, 102,'true'
SELECT
Min(ID) ID,
CASE WHEN FromID>=ToID THEN FromID ELSE ToID END FromID,
CASE WHEN FromID<ToID THEN FromID ELSE ToID END ToID,
COUNT(1) AllCount,
COUNT(CASE WHEN IsNew='true' THEN 1 ELSE NULL END) NewCount
FROM TEST1
GROUP BY
CASE WHEN FromID>=ToID THEN FromID ELSE ToID END,
CASE WHEN FromID<ToID THEN FromID ELSE ToID END
------------------
ID FromID ToID AllCount NewCount
----------- ----------- ----------- ----------- -----------
1 103 102 3 2
4 104 102 1 1
5 105 102 1 1
说得很对,我也一边在想怎么解决。
在原语句的基础上修改没有得到想要的结果,因为这里有区别于传统的group by col1,col2,怎么说呢,从意思上来说大概相当于group by col1,col2 or col2,col1
所以我目前想到的是先读取不带统计字段的存入临时表中,然后游标遍历读取每组对应的两个统计字段。
只是觉得繁琐。