簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM