我目前正致力于计算具有多个联接的更大数据集,最终结果是跨两个表的计算。我当前的脚本如下所示:
USE db1
Go
SELECT
customer, tb1.custid
FROM
[dbo].[tb1]
LEFT OUTER JOIN
[dbo].[tb2] ON tb1.custid = tb2.custid
LEFT OUTER JOIN
[dbo].[tb3] ON tb2.custnumber = tb3.custnumber
LEFT OUTER JOIN
[dbo].[tb4] ON tb2.custid = tb4.custid
WHERE
tb1.custclass = 'non-person'
AND tb4.zip IN ('11111', '11112')
GO
正如您所看到的,它不是最干净的,但它正在收集初始信息。连接数的原因是由于我没有创建的令人难以置信的奇怪的表结构以及我需要的数字数据仅存储在tb3中。
我现在要做的是计算来自tb3的3个字段的总和,它们都被设置为数字字段,并对第4个字段(也是数字)进行AND / OR比较。我知道我可以将它们合并在一起,但我希望对三件事情有所了解:
提前谢谢你。
答案 0 :(得分:1)
将SUM计算放在查询中的位置?
如果您想要输出,您可能只想将其添加到SELECT
SELECT
customer, tb1.custid
(tb3.col1 + tb3.col2 + tb3.col3) as Sum
FROM
...
在何处放置以及如何将SUM总数与第4个字段进行比较?
您可能希望使用CASE
语句执行此操作,这也可以回答您的上一个问题
是否可以将两个值中的较高者返回到初始SELECT中的TOTAL列?
SELECT
customer, tb1.custid
CASE WHEN (tb3.col1 + tb3.col2 + tb3.col3) > tb3.col4
THEN (tb3.col1 + tb3.col2 + tb3.col3)
ELSE tb3.col4
END as Total
FROM
...
答案 1 :(得分:0)
您应该能够将总和计算为嵌套查询:
SELECT (field1 + field2 + field3) AS fields_sum FROM tb3 (...)
然后在您的主要查询中,您可以执行以下操作:
SELECT customer, tb1.custid, (CASE WHEN fields_sum > fourth_field THEN fields_sum ELSE fourth_field END) AS TOTAL (...)