如何創建查詢將顯示名稱中包含相同值的所有資料。這可能嗎。這與我昨天的第一個問題相似。僅使用查詢中的名稱
例如 - 表 1:
| ID | 名稱 | 年齡 |
|---|---|---|
| 1 | 約翰 | 2 |
| 2 | 標記 | 10 |
| 3 | 肯 | 20 |
| 4 | 約翰 | 2 |
| 5 | 缺口 | 12 |
| 6 | 缺口 | 23 |
| 7 | 尼克瓊斯 | 32 |
| 8 | 哈米爾 | 42 |
| 9 | 約翰 | 2 |
期望的輸出:
| ID | 名稱 | 年齡 |
|---|---|---|
| 1 | 約翰 | 2 |
| 4 | 約翰 | 2 |
| 5 | 缺口 | 12 |
| 6 | 缺口 | 23 |
| 7 | 尼克瓊斯 | 32 |
| 9 | 約翰 | 2 |
uj5u.com熱心網友回復:
您可以使用COUNT()分析功能,例如
WITH t AS
(
SELECT t.*,
COUNT(*) OVER (PARTITION BY REGEXP_SUBSTR(LOWER(t.name),'[^ ] ')) AS cnt
FROM table1 t
)
SELECT ID, Name, Age
FROM t
WHERE cnt > 1
ORDER BY ID
Demo
需要不區分大小寫,并提取的第一部分name以分隔姓名和姓氏,前提是即使有兩個以上單詞的姓名組合,也只有名字是感興趣的問題。
uj5u.com熱心網友回復:
你可以那樣做。
select * from #temp where Names in (
select Names from #temp
group by Names having count(*) > 1
)
uj5u.com熱心網友回復:
您也可以使用 EXISTS。將兩個名稱都轉換為大寫以獲取 'john' 和 'John' 行。
select a.*
from table_1 a
where exists(select 1
from table_1 b
where a.id <> b.id and UPPER(a.name) = UPPER(b.name))
uj5u.com熱心網友回復:
SELECT * FROM Table1
WHERE Name IN (
SELECT DISTINCT Name
FROM Table1
GROUP BY Name
HAVING COUNT(*) > 1
)
ORDER BY Name
區分大小寫的資料庫
SELECT * FROM Table1 WHERE LOWER(Name) IN (
SELECT DISTINCT LOWER(Name)
FROM Table1
GROUP BY LOWER(Name)
HAVING COUNT(*) > 0
)
ORDER BY Name
uj5u.com熱心網友回復:
SELECT * FROM Persenel WHERE LOWER(Name) IN ( SELECT DISTINCT LOWER(Name) 從 Persenel GROUP BY LOWER(Name) HAVING COUNT(LOWER(PName)) > 1 ) 按名稱排序
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408190.html
標籤:
