需要帮助有点复杂的查询

Needed helpful hand with a bit complicated query

我有一个 table 'Tasks' 具有以下结构

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

和另一个 table,其中用户有权访问 table 中名为 'UsersCopmpanies'

的特定公司
[UserId], [CompanyId]
1,1

事情是任务号。 220 在公司之间转移。 1 月份的任务属于 copmanyId=1,2 月份的任务属于 copmanyId = 2。

根据 table 'UsersCopmpanies' 用户没有 compnayid = 2 的权限。

我需要做的是从 table 'Tasks' 期望字段值中获取两行,因为用户没有权限。 预期结果应为:

[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')

您可以使用 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;

我认为这个使用 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

一些代码:

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