Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在联接表的分组数据中使用子查询对两列求和_Sql Server_Database_Tsql - Fatal编程技术网

Sql server 如何在联接表的分组数据中使用子查询对两列求和

Sql server 如何在联接表的分组数据中使用子查询对两列求和,sql-server,database,tsql,Sql Server,Database,Tsql,我有一个疑问: SELECT COUNT(*) as Avalied FROM PY_LeaveTransactionMasterTAB as lm JOIN PY_LeaveTransactionSubsidaryTAB as ls ON lm.LV_TransMasterId = ls.LV_TransMasterId WHERE lm.SystemCode = 'faheem123' AND lm.EmployeeCode = '0014' AND lm.Status ='Approve

我有一个疑问:

SELECT COUNT(*) as Avalied
FROM PY_LeaveTransactionMasterTAB as lm
JOIN PY_LeaveTransactionSubsidaryTAB as ls 
ON lm.LV_TransMasterId = ls.LV_TransMasterId
WHERE lm.SystemCode = 'faheem123' AND lm.EmployeeCode = '0014' AND lm.Status ='Approved'
Group by lm.Status
上述查询返回:

Availed
-------
   3
还有一个问题:

SELECT PY_Leave + CY_Leave as Openning 
FROM PY_LeaveOpeningTAB 
WHERE SystemCode = 'faheem123' and EmployeeCode = '0014'
此查询返回:

Openning
--------
   25
   23
   30
我想结合以上两个查询得到以下结果:

Openning   Availed
--------   --------
   25         3
   23         0
   30         0

我如何实现上述结果?谢谢:)

我不认为您希望一行显示“3”,而另一行显示“0”。你可以这样做:

SELECT (PY_Leave + CY_Leave) as Openning,
       (CASE WHEN PY_Leave + CY_Leave = 25 THEN x.Avalied ELSE 0 END) as Avalied
FROM PY_LeaveOpeningTAB lo CROSS JOIN
     (SELECT COUNT(*) as Avalied
      FROM PY_LeaveTransactionMasterTAB lm JOIN
           PY_LeaveTransactionSubsidaryTAB as ls 
           ON lm.LV_TransMasterId = ls.LV_TransMasterId
      WHERE lm.SystemCode = 'faheem123' AND lm.EmployeeCode = '0014' AND
            lm.Status ='Approved'
     ) x
WHERE lo.SystemCode = 'faheem123' and lo.EmployeeCode = '0014';

正如我所说的,(对我来说)删除
案例并将“3”放在所有三个“匹配”行上更有意义。

您可以尝试使用CTE

 WITH CTE_preselect AS (
 SELECT EmployeeCode,PY_Leave + CY_Leave as Openning 
 FROM PY_LeaveOpeningTAB 
 WHERE SystemCode = 'faheem123' and EmployeeCode = '0014'
 )

 SELECT Openning,COUNT(*) as Avalied
 FROM PY_LeaveTransactionMasterTAB as lm
 JOIN PY_LeaveTransactionSubsidaryTAB as ls 
 ON lm.LV_TransMasterId = ls.LV_TransMasterId
 JOIN CTE_preselect ON lm.EmployeeCode = CTE_preselect.EmployeeCode
 WHERE lm.SystemCode = 'faheem123' AND lm.EmployeeCode = '0014' AND 
 lm.Status ='Approved'
 Group by Openning,lm.Status
假设可用的“属于”第一行

Select A.Opening
      ,Availed = case when A.RN=1 then B.Availed else 0 end)
 From (
        SELECT PY_Leave + CY_Leave as Openning 
              ,RN = Row_Number() over (Order by (Select NULL))
         FROM PY_LeaveOpeningTAB 
         WHERE SystemCode = 'faheem123' and EmployeeCode = '0014'
      ) A
 Cross Join (
                SELECT COUNT(*) as Avalied
                FROM PY_LeaveTransactionMasterTAB as lm
                JOIN PY_LeaveTransactionSubsidaryTAB as ls 
                ON lm.LV_TransMasterId = ls.LV_TransMasterId
                WHERE lm.SystemCode = 'faheem123' AND lm.EmployeeCode = '0014' AND lm.Status ='Approved'
                Group by lm.Status
            ) B

为什么您不希望所有三行上的
可用
都使用“3”
呢?对于
打开
25
PY_LeaveTransactionSubsidaryTAB
表中有3行计数,而对于其他行,在
PY_LeaveTransactionSubsidaryTAB
表中找不到行计数,这就是为什么我要为它们显示
0
,您的查询将始终返回可用的
0
,如果
Openning
25
,我想显示相应的行计数(如果找到),如果没有,则显示
0