复杂计算 - SQL Server

时间:2015-09-04 14:39:25

标签: sql sql-server

我目前正致力于计算具有多个联接的更大数据集,最终结果是跨两个表的计算。我当前的脚本如下所示:

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比较。我知道我可以将它们合并在一起,但我希望对三件事情有所了解:

  1. 在查询中将SUM计算放在何处?
  2. 在何处放置以及如何将SUM总数与第4个字段进行比较?
  3. 是否可以将两个值中的较高者返回到初始SELECT中的TOTAL列?
  4. 提前谢谢你。

2 个答案:

答案 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 (...)