![](/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.