选择多个子查询

时间:2018-06-29 07:57:32

标签: sql sql-server subquery

我有一些子查询,需要返回不同的结果。每个子查询使用不同的聚合函数,例如SUM()COUNT(*)。我所做的是用SELECT (SELECT subquery, SELECT subquery)封装它们,不确定是否可行。

预期结果:

TwoYears 123 5

SELECT(
(SELECT
(SELECT SUM(AHT)
FROM
(
    SELECT 
        CASE 
            WHEN DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE()) >= 2 AND (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 2 OR (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 1
                THEN [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Value]
    END AS AHT
    FROM [AgentProfile_CRT].[dbo].[uvw_AHTMaster] WHERE [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Month] = 'January'  AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Year] = 2018 AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[AccountID] = 8 AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[LOBID] = 23
) f
WHERE AHT = AHT ) AS TwoYears),

(SELECT
(SELECT COUNT(*) AS TwoYears
FROM
(
    SELECT 
        CASE 
            WHEN DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE()) >= 2 AND (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 2 OR (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 1
                THEN 'Good'
    END AS Result
    FROM [AgentProfile_CRT].[dbo].[uvw_AHTMaster] WHERE [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Month] = 'January'  AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Year] = 2018 AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[AccountID] = 8 AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[LOBID] = 23
) f
WHERE Result = 'Good') AS TwoYears)
) a 

1 个答案:

答案 0 :(得分:1)

您需要全部合并并删除一些子选择。

赞:

7bit