用于返回具有唯一列的行的存储过程

Ret*_*der 1 sql-server-2008

我有一个SQL Server 2008表,其中包含以下列:

ID = uniqueidentifier
EntryID = uniqueidentifier
EntryType = nvarchar(128)
Run Code Online (Sandbox Code Playgroud)

在此表中,某些行可能具有相同的EntryType值.我想要做的是运行一个查询,它将返回EntryType字段唯一的行.我想到这一点的唯一方法是按此字段进行分组,然后检查只有一个条目的组.以下是一些示例数据:

11C5AEEB-6435-489D-B353-6E8D63FCD1AD, 46F95579-0AB6-4EAC-927C-7259C2F1E046, Ford
01DBC8EE-78E4-4544-A816-87086BD45DDE, EBB689E3-1379-4E22-98B2-C6BD8EBB0F9D, VW
E948C6D2-0E6E-4AC7-9799-83C5EB180219, 46F95579-0AB6-4EAC-927C-7259C2F1E046, Ford
E70806DC-9D43-4341-AEF8-4252612AF00B, 3A3D2602-DB92-412B-AA4E-8FA70438A00A, Ford
D4460A15-2C4B-475E-B5D9-82C625C10DF7, 3EA31E10-4941-46D3-B241-B091259A2AF4, Lexus
Run Code Online (Sandbox Code Playgroud)

我想运行一个存储过程,当应用于上述数据时,只会返回该VW条目,因为该EntryType列是唯一的.

Aar*_*and 5

;WITH x AS 
(
  -- first, identify rows where only one EntryType exists:
  SELECT EntryType FROM dbo.table_name
  GROUP BY EntryType HAVING COUNT(*) = 1
)
-- now join to that from the main table:
SELECT t.ID, t.EntryID, t.EntryType
  FROM dbo.table_name AS t
  INNER JOIN x 
  ON x.EntryType = t.EntryType;
Run Code Online (Sandbox Code Playgroud)