繁体   English   中英

TSQL查询通过连接两个表来获取不同WHERE子句的同一列值的差异

[英]TSQL query to get the Difference of values of same column for different WHERE clause by joining two tables

下面是示例查询,它给出了来自两个不同表的员工和经理的评级。

SELECT pr.[task_id],
       pr.[user_rating],ts.[title]
FROM [dbo].[rpt_task] ts
      INNER JOIN [dbo].[rpt_review] pr ON ts.[task_id] = pr.[task_id]
WHERE ts.[culture_id] = 1

样本输出

现在,我正在尝试起草查询,结果如下

样本期望输出 - [ 方差为('经理审查'的用户等级 -'self_Review' 的用户等级)

task_id   variance
6095      0

我试过

SELECT pr.[task_id],
       ((SELECT pr.[user_rating]
         FROM [dbo].[rpt_task] ts
              INNER JOIN [dbo].[rpt_review] pr ON ts.[task_id] = pr.[task_id]
         WHERE ts.[title] = 'Manager Review') -
        (SELECT pr.[user_rating]
         FROM [dbo].[rpt_task] ts
              INNER JOIN [dbo].[rpt_review] pr ON ts.[task_id] = pr.[task_id]
         WHERE ts.[title] = 'Self Review'))
FROM [dbo].[rpt_task] ts
      INNER JOIN [dbo].[rpt_review] pr ON ts.[task_id] = pr.[task_id]  
WHERE ts.[culture_id] = 1
GROUP BY pr.[task_id]

假设:您没有提供底层表的表结构,因此我假设rpt_review表不需要连接两次,因为那里有一条记录,并且rpt_task表中的每个审阅者都有一条记录。
如果这个假设不正确,请纠正我。

您需要自行加入表格才能获得经理和自我评论。 我已将它们都加入到rpt_review表中,并按照您的要求进行了数学计算。

示例代码:

SELECT 
     pr.[task_id]
    ,ts_manager.[user_rating] - ts_self.[user_rating] AS Variance
FROM [dbo].[rpt_task] ts_self
INNER JOIN [dbo].[rpt_review] pr ON ts.[task_id] = pr.[task_id]
INNER JOIN [dbo].[rpt_task] ts_manager ON ts_self.culture_id = ts_manager.culture_id
WHERE ts_self.[culture_id] = 1
AND ts_self.[title] = 'Self Review'
AND ts_manager.[title] = 'Manager Review';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM