三個欄位name1,name2,time
資料
A B 10
A B 20
B A 30
A C 40
欄位含義為兩人通話,及通話時間,現要求通話總時長
即輸出格式為
A B 60
A C 40
要求不使用UDF,請問如何做到將AB,BA劃分到同一組中
uj5u.com熱心網友回復:
SELECT
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 ;
uj5u.com熱心網友回復:
--測驗資料
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
uj5u.com熱心網友回復:
我有七萬多條資料,這樣不太好吧太死了
uj5u.com熱心網友回復:
七萬多條資料,要執行多久。還有什么要求嗎。或者您覺得哪里可能會有問題。
uj5u.com熱心網友回復:
SELECT
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 ;
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......