![](/img/trans.png)
[英]How to select 10 rows for a each column value in the 'IN' statement (T-SQL)
[英]T-SQL Select full rows with same column value
我想顯示具有在另一行中存在的序列的所有行。
如果我喜歡它,它會起作用
SELECT
[Serial]
FROM [x].[dbo].[Devices]
GROUP BY Serial
HAVING COUNT(*) > 1
但是當我添加更多選擇列時
SELECT [ID]
,[UUID]
,[Serial]
FROM [x].[dbo].[Devices]
GROUP BY Serial
HAVING COUNT(*) > 1
我懂了
“ ID”在選擇列表中無效,因為它不包含在聚合函數或GROUP BY子句中。
為什么我不能選擇更多列?
我應該如何顯示完整的行?
您可以使用窗口函數執行此操作:
select *
from (
select *,
count(*) over (partition by [Serial]) as serial_count
from [x].[dbo].[Devices]
) t
where serial_count > 1;
通常,這要比通過聚合加入子選擇更快。
希望您需要此查詢,它將顯示所有具有另一行中存在的序列的行。
SELECT D1.[ID]
,D1.[UUID]
,D1.[Serial]
FROM [x].[dbo].[Devices] D1
JOIN ( SELECT [Serial]
FROM [x].[dbo].[Devices]
GROUP BY Serial
HAVING COUNT(*) > 1 ) D2 ON D1.[Serial] = D2.[Serial]
只要ID和UUID對於序列而言是唯一的,請嘗試按所有列進行分組。
SELECT [ID]
,[UUID]
,[Serial]
FROM [x].[dbo].[Devices]
GROUP BY Serial
,[ID]
,[UUID]
HAVING COUNT(*) > 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.