三个字段name1,name2,time
数据
A B 10
A B 20
B A 30
A C 40
字段含义为两人通话,及通话时间,现要求通话总时长
即输出格式为
A B 60
A C 40
要求不使用UDF,请问如何做到将AB,BA划分到同一组中
数据
A B 10
A B 20
B A 30
A C 40
字段含义为两人通话,及通话时间,现要求通话总时长
即输出格式为
A B 60
A C 40
要求不使用UDF,请问如何做到将AB,BA划分到同一组中
解决方案 »
- 关于count聚合函数用法的困惑
- 用MYSQL BACKUP工具备份出来的SQL,如何还原? 用MYSQL BACKUP工具备份出来的SQL,如何还原? 用MYSQL BACKUP工具备份
- 请教这样的update该怎么写?
- mysql同步能不能不那么敏感?
- 短时间内执行1000条mysql_real_query()执行太慢了,请问有什么办法优化没?
- 现在求一SQL语句,急切中……
- 紧急求教!mysql连接出错
- 关于mysql服务重装的问题
- MS sql server7.0 完整企业版 和 sql server2000 简体中文版
- 用apache-mysql-php4软件在win2kserver下配置支持php的环境问题?很急!希望能详细解答!
- 来一位熟悉数据库的大佬帮忙解答一下下面这段函数的意思,感激不尽
- sql统计查询,关于树结构,求解!!!
CASE WHEN NAME1<=NAME2 THEN NAME1 ELSE NAME2 END NAME1,
CASE WHEN NAME1>NAME2 THEN NAME1 ELSE NAME2 END NAME2,
SUM(TIME) TIME
FROM (
SELECT 'A' NAME1,'B' NAME2,10 TIME FROM DUAL UNION ALL
SELECT 'A' NAME1,'B' NAME2,20 TIME FROM DUAL UNION ALL
SELECT 'B' NAME1,'A' NAME2,30 TIME FROM DUAL UNION ALL
SELECT 'A' NAME1,'C' NAME2,40 TIME FROM DUAL ) T
GROUP BY
CASE WHEN NAME1<=NAME2 THEN NAME1 ELSE NAME2 END ,
CASE WHEN NAME1>NAME2 THEN NAME1 ELSE NAME2 END
ORDER BY 1,2 ;
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([name1] nvarchar(21),[name2] nvarchar(21),[time] int)
Insert #T
select N'A',N'B',10 union all
select N'A',N'B',20 union all
select N'B',N'A',30 union all
select N'A',N'C',40
Go
--测试数据结束
SELECT t.name1,t.name2,SUM(T3.time) AS time FROM (
SELECT DISTINCT T1.name1,
T1.name2
FROM #T T1
WHERE NOT EXISTS ( SELECT T2.name1
FROM #T T2
WHERE T1.name1 = T2.name2
AND T1.name2 = T2.name1
AND T1.name1 > T2.name1))t
JOIN #T T3 ON (T3.name1 = t.name1 AND T3.name2 = t.name2) OR (T3.name2 = t.name1 AND T3.name1 = t.name2)
GROUP BY t.name1,t.name2
中间的union all 部分,数据多多少也要连起来多少,我认为是这样的,几万个名字,没办法写的