Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 返回具有唯一列的行的存储过程_Sql Server 2008 - Fatal编程技术网

Sql server 2008 返回具有唯一列的行的存储过程

Sql server 2008 返回具有唯一列的行的存储过程,sql-server-2008,Sql Server 2008,我有一个SQL Server 2008表,其中包含以下列: ID = uniqueidentifier EntryID = uniqueidentifier EntryType = nvarchar(128) 在此表中,某些行可能具有相同的EntryType值。我要做的是运行一个查询,该查询将返回EntryType字段唯一的行。我想这样做的唯一方法是按此字段分组,然后检查只有一个条目的组。以下是一些示例数据: 11C5AEEB-6435-489D-B353-6E8D63FCD1AD, 46F9

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

ID = uniqueidentifier
EntryID = uniqueidentifier
EntryType = nvarchar(128)
在此表中,某些行可能具有相同的
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

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

在SQL Server 2008中,您可以与一起使用

;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;

派生表将为您提供

ID          EntryID     EntryType  C
--------    --------    ---------  --
11C5AEEB..  46F95579..  Ford       3
E948C6D2..  46F95579..  Ford       3
E70806DC..  3A3D2602..  Ford       3
D4460A15..  3EA31E10..  Lexus      1
01DBC8EE..  EBB689E3..  VW         1

并且主查询选择计数
C
为1的行。

在SQL Server 2008中,您可以与一起使用

派生表将为您提供

ID          EntryID     EntryType  C
--------    --------    ---------  --
11C5AEEB..  46F95579..  Ford       3
E948C6D2..  46F95579..  Ford       3
E70806DC..  3A3D2602..  Ford       3
D4460A15..  3EA31E10..  Lexus      1
01DBC8EE..  EBB689E3..  VW         1

主查询选择计数
C
为1的行。

为什么雷克萨斯行不是唯一的?亚伦-你说得很对,雷克萨斯也是唯一的。我在刚下班的时候匆匆写了这篇文章。很好的发现。为什么雷克萨斯排不也是独一无二的?亚伦-你说得很对,雷克萨斯也是独一无二的。我在刚下班的时候匆匆写了这篇文章。很好,方法上的差异是不相关的。我对你的帖子投了反对票,不是因为你使用了子查询,而是因为你的查询没有解决问题(如果你仔细观察,我不是唯一一个——一个盲目的向上投票和两个向下投票)。请考虑纠正你的逻辑(或证明它是正确的),而不是寻求复仇。谢谢亚伦。这对我有用。谢谢你的反馈。@Mike方法上的差异无关紧要。我对你的帖子投了反对票,不是因为你使用了子查询,而是因为你的查询没有解决问题(如果你仔细观察,我不是唯一一个——一个盲目的向上投票和两个向下投票)。请考虑纠正你的逻辑(或证明它是正确的),而不是寻求复仇。谢谢亚伦。这对我有用。谢谢你的反馈。