首页 > 解决方案 > 如何对两个 SQL 查询使用 IF 或 CASE JOINED 遍历每条记录

问题描述

我想在遍历两个 JOINED SQL 查询的每条记录时使用IFor语句。CASE

每个AccountID(AccountSDIF)都有自己独特的帐户创建日期和帐户的任务创建日期。如果,则在帐户创建日期和帐户的任务创建日期之间count(AccountSDIF) =1应用函数。datediff如果,则在帐户创建日期和帐户的第一个任务创建日期之间count(AccountSDIF) > 1应用一个函数。datediff

这是我获取计数的查询AccountID(AccountSDIF)

SELECT 
    A_Std.AccountSFID
    ,COUNT(A_Std.AccountSFID) as Count
FROM [PSA].[Stg_Canonical_Task_Std] AS T_Std 
LEFT JOIN [PSA].[Stg_Canonical_Account_Std] AS A_Std 
  ON T_Std.AccountID = A_Std.AccountSFID 
INNER JOIN [PSA].[Stg_Canonical_Task_Custom] T_Cust 
  on T_Std.[TaskSFID] = T_Cust.[TaskSFID] 
WHERE  T_Cust.Activity_C IN ('Call', 'Email') 
   AND T_Std.Program_Name = 'DowWater'  
   AND T_Std.Status = 'Completed' 
   AND T_Std.AccountID IS NOT NULL 
GROUP BY A_Std.AccountSFID

AccountId 计数

这是我获取帐户创建日期和帐户任务创建日期的查询。

select 
   (A_Std.CreatedDate) as AccountCreatedDate
   ,(T_Std.CreatedDate) as AccountsTaskCreatedDate
   ,A_Std.AccountSFID  
from [PSA].[Stg_Canonical_Task_Std] AS T_Std 
LEFT JOIN [PSA].[Stg_Canonical_Account_Std] AS A_Std 
    ON T_Std.AccountID = A_Std.AccountSFID 
INNER JOIN [PSA].[Stg_Canonical_Task_Custom] T_Cust
    on T_Std.[TaskSFID] = T_Cust.[TaskSFID] 
WHERE  T_Cust.Activity_C IN ('Call', 'Email') 
   AND T_Std.Program_Name = 'DowWater'  
   AND T_Std.Status = 'Completed' 
   AND T_Std.AccountID IS NOT NULL 

帐户创建日期和帐户任务创建日期

标签: sqltsql

解决方案


如果我理解:

SELECT 
    A_Std.AccountSFID
    ,datediff(A_Std.CREATEDDATE,min(T_Std.TASKCREATEDDATE))
FROM [PSA].[Stg_Canonical_Task_Std] AS T_Std 
LEFT JOIN [PSA].[Stg_Canonical_Account_Std] AS A_Std 
  ON T_Std.AccountID = A_Std.AccountSFID 
INNER JOIN [PSA].[Stg_Canonical_Task_Custom] T_Cust 
  on T_Std.[TaskSFID] = T_Cust.[TaskSFID] 
WHERE  T_Cust.Activity_C IN ('Call', 'Email') 
   AND T_Std.Program_Name = 'DowWater'  
   AND T_Std.Status = 'Completed' 
   AND T_Std.AccountID IS NOT NULL 
GROUP BY A_Std.AccountSFID,A_Std.CREATEDDATE

推荐阅读