1

次の列を持つSQLServer2008テーブルがあります。

ID = uniqueidentifier
EntryID = uniqueidentifier
EntryType = nvarchar(128)

この表では、一部の行のEntryType値が同じである可能性があります。私がやりたいのは、EntryTypeフィールドが一意である行を返すクエリを実行することです。これを行うことを考えた唯一の方法は、このフィールドでグループ化してから、1つのエントリだけでグループをチェックすることです。データの例を次に示します。

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

4

2 に答える 2

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;
于 2012-08-20T16:57:26.580 に答える
1

SQL Server 2008では、 count()over( )を使用できます。

select T.ID, T.EntryID, T.EntryType
from
  (
  select ID, EntryID, EntryType,
         count(*) over(partition by EntryType) as C
  from YourTable
  ) as T
where T.C = 1

SQLフィドル

派生テーブルはあなたに与えるでしょう

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である行を選択します。

于 2012-08-21T05:29:35.783 に答える