SQL Server - 在FROM中选择使用CASE

时间:2014-06-03 13:01:24

标签: sql sql-server

我试图在select内使用case条款进行from,但我还没想到我该怎么做。

实际上,这就是我选择的样子:

SELECT 
   a.UserId,   
   ISNULL(sent, 0) AS sent,  
   ISNULL(received,0) AS received
FROM        
   (SELECT 
       TT1.UserId as UserId, 
       SUM(TotalUsers) AS sent        
    FROM 
       #TableTemp1 TT1
    INNER JOIN 
       #TableTemp2 TT2 ON TT1.UserId = TT2.UserId
    WHERE 
       TT1.Status = -1
    GROUP BY 
       TT1.UserId) a        
LEFT JOIN    
      .....

我需要更改inside()中的语句:

SELECT 
   a.UserId,   
   ISNULL(sent, 0) AS sent,  
   ISNULL(received, 0) AS received
FROM        
   (CASE TT1.ExportDate 
       WHEN IS NULL 
         THEN 
            SELECT
                TT1.UserId as UserId, TotalSent as sent 
            FROM SentData 
            INNER JOIN DataConsolidated DC on CDE.UserId = DC.UserId 
         ELSE
            SELECT 
                TT1.UserId as UserId, SUM(TotalUsers) AS sent        
            FROM #TableTemp1 TT1
            INNER JOIN #TableTemp2 TT2 ON TT1.UserId = TT2.UserId
            WHERE TT1.Status = -1
    GROUP BY TT1.UserId
       END) a        
 LEFT JOIN  
       ......

我知道我没有' TT1'当我打电话给CASE但我在SQL条款中丢失了。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果这是在存储过程中,我建议将您的逻辑放在IF / ELSE块中。但是,如果您正在进行内联查询,那么最好运行两个集合(条件可能导致空集),然后UNION结果。像这样:

SELECT a.UserId,   
     ISNULL(sent,0) AS sent,  
     ISNULL(received,0) AS received
  FROM        
  (        
           SELECT TT1.UserId as UserId, TotalSent as sent 
           FROM SentData inner join DataConsolidated DC on CDE.UserId = DC.UserId 
           WHERE TT1.ExportDate IS NULL

           UNION

           SELECT TT1.UserId as UserId, SUM(TotalUsers) AS sent        
           FROM #TableTemp1 TT1
                INNER JOIN #TableTemp2 TT2 ON TT1.UserId = TT2.UserId
           WHERE TT1.Status = -1
             AND TT1.ExportDate IS NOT NULL
           GROUP BY TT1.UserId
  ) a        
  LEFT JOIN  
       ......

答案 1 :(得分:0)

不是100%你想要实现的目标以及CDE来自哪个geuss是senddate的allias?

但是如果你想处理一个案例,你需要把它放在你的选择中。我猜你在找这样的东西?

SELECT a.UserId,   
     ISNULL(sent,0) AS sent,  
     ISNULL(received,0) AS received
  FROM        
  (        

        SELECT tt1.userid
              case when TT1.ExportDate is null 
              then ( 
                     select TotalSent from SentData CDE
                     inner join DataConsolidated DC on CDE.UserId = DC.UserId
                     where tt1.userId = CDE.userid
                    ) 
              else SUM(TotalUsers)
              end AS sent        
        FROM #TableTemp1 TT1
            INNER JOIN #TableTemp2 TT2 ON TT1.UserId = TT2.UserId
        WHERE TT1.Status = -1
            GROUP BY TT1.UserId
end 
  ) a        
  LEFT JOIN  
       ......
相关问题