我试图在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条款中丢失了。
感谢任何帮助。
答案 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
......