Нужна полезная рука с немного сложным запросом - PullRequest
0 голосов
/ 04 января 2019

У меня есть таблица «Задачи» со следующей структурой

[TaskId],[CompanyId], [Year], [Month], [Value]
220,1,2018,1,50553.32
220,2,2018,2,222038.12

и другая таблица, в которой пользователи имеют разрешения для определенных компаний в таблице с именем «UsersCopmpanies»

[UserId], [CompanyId]
1,1

ивещь задача нет.220 был перемещен между компаниями.В январе задача принадлежала copmanyId = 1, а в феврале эта задача принадлежала copmanyId = 2.

Согласно таблице «UsersCopmpanies» пользователь не имеет разрешения на compnayid = 2.

ЧтоМне нужно сделать, чтобы получить обе строки из таблицы «Задачи» ожидают поле Значение, потому что у пользователя нет разрешения.Ожидаемый результат должен быть:

[TaskId], [CompanyId], [Year], [Month],[Value]
220,1,2018,1,50553.32
220,2,2018,2,(NULL or somenthing else for.example string 'lack of permission')

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Я думаю, этот запрос с использованием LEFT JOIN может работать на вас ожидаемым:

CREATE TABLE #MyTasks  
(TaskId   int,  
   CompanyId      int,
   YearCol varchar(50),
   MonthCol varchar(50),
   SomeValue varchar(50)
  );  
GO  

INSERT INTO #MyTasks 
SELECT 220,1,2018,1,50553.32
UNION
SELECT 220,2,2018,2,222038.12

CREATE TABLE #MyUsersCopmpanies
(UserId   int PRIMARY KEY,  
   CompanyId      varchar(50) 
  );  
GO  



INSERT INTO #MyUsersCopmpanies 
SELECT 1,1


DECLARE  @MyUserParam INT = 1;

SELECT #MyTasks.TaskId, #MyTasks.CompanyId, #MyTasks.YearCol, #MyTasks.MonthCol, 
    CASE WHEN #MyUsersCopmpanies.UserId IS NOT NULL THEN  #MyTasks.SomeValue ELSE 'lack of permission' END AS 'ValueTaskByPermissions'
FROM #MyTasks 
LEFT JOIN #MyUsersCopmpanies ON #MyUsersCopmpanies.CompanyId = #MyTasks.CompanyId AND #MyUsersCopmpanies.UserId = @MyUserParam;


DROP TABLE  #MyTasks

DROP TABLE  #MyUsersCopmpanies

РЕЗУЛЬТАТ:

TaskId  CompanyId   YearCol MonthCol    ValueTaskByPermissions
220             1      2018        1    50553.32
220             2      2018        2    lack of permission
0 голосов
/ 07 января 2019

Код:

SELECT t.taskid,t.companyid,t.year,t.month, 
       (CASE WHEN u.companyid IS NOT NULL THEN t.value ELSE "lack of permission" end) AS ValueData 
FROM `x_task` t LEFT JOIN x_userscopmpanies u ON u.companyid = t.companyid 
0 голосов
/ 04 января 2019

Вы можете использовать left join:

select t.TaskId, t.CompanyId, t.Year, t.Month, 
       (case when uc.CompanyId is not null then Value end) as Value
from tasks t left join
     UsersCompanies uc
     on uc.CompanyId = t.CompanyId and uc.UserId = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...