我正在创建下面的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
答案 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