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)。这种语法是非法的。