Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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_Sql Server - Fatal编程技术网

SQL Server-从中选择内部用例

SQL Server-从中选择内部用例,sql,sql-server,Sql,Sql Server,我正在尝试使用from中的case子句来执行select,但我不知道如何执行 实际上,我的选择就是这样的: SELECT a.UserId, ISNULL(sent, 0) AS sent, ISNULL(received,0) AS received FROM (SELECT TT1.UserId as UserId, SUM(TotalUsers) AS sent FROM

我正在尝试使用
from
中的
case
子句来执行
select
,但我不知道如何执行

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

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    
      .....
我需要为以下内容更改()中的语句:

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  
       ......
我知道我调用CASE时没有“TT1”,但我有点迷失在SQL子句中


非常感谢您的帮助。

您想要实现的目标不是100%,CDE从何而来?这就是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  
       ......

如果这是在存储过程中,我建议将逻辑放在If/ELSE块中。但是,如果要执行内联查询,最好同时运行两个集合(条件可能会导致空集合),然后合并结果。像这样:

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  
       ......

提供模式可能有助于我们帮助您实现解决方案的效率。T-SQL中的CASE是一个可以检查条件并返回一个或另一个值的表达式-它不是一个可以执行代码块之类内容的流控制语句。是的,这是一个存储过程..这个选择填充一个插入的值..类似于插入bla(a,b,c)值好的。在你的问题中提到这一点会很好。这种方法仍然有效,但是IF/ELSE语句会更有效。由于您只发布了部分查询(而不是任何插入语法),因此我很难为其他方法提供良好的语法。基本上,IF/ELSE的语法必须类似于IF(condition)ELSE。不能说INSERT(IF(condition)ELSE)。这种语法是非法的。