2017-12-18 4 views
0

私はuserProfiles.UserProfilesIdというIDがフィールドUserProfiles.ManagerIdにあるかどうかを判断して、ユーザーがマネージャであるかどうかを判断しようとしています。私の現在のSQLステートメントは、IDが有効ではないと言います。この情報を判断するために作成できるサブクエリはありますか?他の列に現在の行の値がありますか?

SELECT 
     IsNull(PersonalTimeRemaining, 0) as PTO, 
     UserProfiles.UserProfileId as id, 
     us.Email, 
     us.LastName + ', ' + us.FirstName, 
     managers.Email as 'manager', 
     case when PersonalTimeRemaining is null then 'hourly' else 'salary' end as salaryType, 
     case when 
     EXISTS(SELECT * from UserProfiles where id = UserProfiles.UserProfileId) 
     then 'User' else 'Manager' end as salaryType 
    FROM UserProfiles 
    inner join Users as us on us.UserId = UserProfiles.UserProfileId 
    inner join Users as managers on managers.UserId = UserProfiles.ManagerId 
+0

をあなたはどのようなものです:ここでは

SELECT COLUMN .. CASE WHEN UP.UserProfileId IS NULL THEN 'Manager' ELSE 'User' END AS SalaryType FROM Users U LEFT JOIN UserProfiles UP ON U.UserId = UP.UserProfileId 

はそれをよく理解することは簡単な例でありますここにしようとしている?サブクエリが必要な理由は、UserProfilesのIDを既に知っていますか? – Sami

+0

は、あなたがタイプミスのようです: 'id = UserProfiles.UserProfileId'、それは' ManagerId = UserProfiles.UserProfileId'ではありませんか? –

+0

脇に、内部結合を使用しているため、このクエリは通常のユーザーと管理者の両方のユーザーのみを返します。 –

答えて

0

は、ここで簡単な例です...この場合には、私は同じテーブルのマネージャーIDのを照会するために、テーブルの別名(TおよびT2)と相関サブクエリを使用しています。サブクエリのか二度テーブルに参加する必要はありません

DECLARE @test TABLE (UserProfileID int, ManagerID int) 
INSERT INTO @test VALUES (1, 4), (2, 4), (3, 4), (4, 5) 

SELECT UserProfileID 
     ,CASE WHEN EXISTS (SELECT T2.ManagerID 
          FROM @test T2 
          WHERE T2.ManagerID = T.UserProfileID 
         ) 
      THEN 'Manager' 
      ELSE 'User' 
     END AS salaryType 

    FROM @test T 
0

が、それは単にです:

CREATE TABLE Users (
    UserId INT 
    -- Other columns 
    ); 
CREATE TABLE UserProfiles (
    UserProfileId INT 
    -- Other columns 
    ); 

INSERT INTO Users VALUES 
(1), (2); 
INSERT INTO UserProfiles VALUES 
(2); 

SELECT U.UserId, 
     CASE WHEN UP.UserProfileId IS NULL THEN 'Manager' ELSE 'User' END AS SalaryType 
FROM Users U LEFT JOIN UserProfiles UP ON U.UserId = UP.UserProfileId; 
関連する問題