私のデータベースには 3 つのテーブルがあります: [Groups] - 特定のグループに関する情報、
CREATE TABLE [dbo].[Groups](
  [Prime_ID] [nvarchar](20) NULL,
  [Name] [nvarchar](100) NULL,   -- there are a number of other fields as well
) ON [PRIMARY]
[User_Groups] - これは各ユーザーが属するグループのリストであるため、あまり適切な名前ではありません。グループは、Prime_ID または Alias によってリストされる場合があります
CREATE TABLE [dbo].[User_Groups](
  [uPrime_ID] [nvarchar](20) NULL,   -- the User's Prime_ID
  [gPrime_ID] [nvarchar](20) NULL,   -- the Group Prime_ID
  [gAlias] [nvarchar](100) NULL,     -- the Group alias
) ON [PRIMARY]
[Convert] - これは、エイリアスから Prime_ID に変換するための中間ファイルです。
CREATE TABLE [dbo].[Convert](
  [Alias] [nvarchar](100) NOT NULL,
  [Prime_ID] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Convert] PRIMARY KEY CLUSTERED 
) ON [PRIMARY]
問題は、User_Groups ファイルに gPrime_ID または gAlias フィールドが入力されていることです。両方埋まっている場合もあります。
Alias フィールドは Prime_ID を参照します。つまり、エイリアス「GeorgeOfTheJungle」は、Prime_ID「BQ47823」を指している可能性があります。
[User_Groups] の行に gPrime_ID が含まれている場合、[Groups] に直接リンクできますが、gAlias がある場合は、最初に [Convert] テーブルにリンクして Prime_ID を取得し、次に [Groups] テーブルにリンクして取得する必要があります。グループ名、アクセスレベルなど
「3 つ以上のテーブルの結合」http://msdn.microsoft.com/en-us/library/aa213227%28v=sql.80%29.aspx (MSDN メソッド) に記載されている方法とそれを試しました。 「SQL Server の条件付き結合」http://weblogs.sqlteam.com/jeffs/archive/2007/04/03/Conditional-Joins.aspx (Jeff のアーカイブ メソッド) から成功しませんでした。MSDN メソッドでは、[Convert] テーブルを介して [Groups] に正しくリンクするか、直接 [Groups] にリンクすることができましたが、両方はできませんでした。もう1つの方法は、私を月に乗せて追い払っただけです。
MSDN メソッド:
SELECT g.name, g.Prime_ID, t.gPrime_ID, t.gAlias
FROM Groups g 
  INNER JOIN [Convert] cv
    ON g.Prime_ID = cv.Prime_ID 
  JOIN User_Groups t
    ON t.gAlias = cv.Alias -- JOIN User_Groups t
--   on t.gPrime_ID = g.Prime_ID
go
ジェフのアーカイブ方法:
SELECT
  g.name, g.Prime_ID, t.gPrime_ID, t.gAlias, coalesce(g.Prime_ID, cv.Alias) AS gp
FROM
  [Groups] g
LEFT OUTER JOIN
  [User_Groups] t  ON t.gPrime_ID = g.Prime_ID
LEFT OUTER JOIN 
  [Convert] cv
  ON g.Prime_ID = cv.Prime_ID 
  JOIN User_Groups ON t.gAlias = cv.Alias
go
MS Server 2012 Express を使用しています