比较多个值SQL

时间:2015-09-22 17:05:14

标签: sql netezza

我正在创建下面的2个临时表。我需要为每个客户创建一个标志,指示所有weekly_sales值是否小于表1中的单个平均值。这样做的最佳方式是什么?

例如,这是表1:

Table 1 
cust_nbr  avg_sales
1234      200

这是表2:

Table 2     
cust_nbr weekly_sales week
1234     222          1
1234     211          2
1234     121          4

2 个答案:

答案 0 :(得分:1)

要获取任何单个值是否大于所有weekly_sales值,您可以执行以下操作。

CASE 
    WHEN @avg > (
        SELECT MAX(weeky_sales)
            FROM [Table 2]
        ) THEN
        1
    ELSE
        0
END

如果将其合并到一个函数中,您可以在[Table 1]上添加一个计算列,以根据avg_sales调用该函数。

答案 1 :(得分:1)

尝试这样做:它应该选择每个客户,如果他们的最大每周销售数字仍然低于他们在Table1中设置的平均值,则标记他们。

SELECT 
    A.Cust_nbr,
    A.Avg_Sales,
    CASE WHEN B.MaxSale < A.Avg_Sales THEN 1 ELSE 0 END IsAlwaysBelowAverage
FROM 
    Table1 A
     LEFT JOIN 
      (
        SELECT 
            Cust_Nbr,
            MAX(Weekly_Sales) AS MaxSale
        FROM Table2 
      ) B ON 
        A.Cust_Nbr = B.Cust_Nbr