2015-09-22 3 views
3

Я создаю 2 временных таблицы ниже. Мне нужно создать флаг, который говорит, что все значения weekly_sales меньше, чем единичное среднее значение в таблице 1 для каждого клиента. Каков наилучший способ сделать это?Сравнить множественные значения SQL

В качестве примера, вот таблица 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

Вы говорите об одном флаге на одного клиента, который говорит вам, что все их продажи ниже среднего или один флажок для каждого клиента в неделю, который говорит вам, что продажи этой недели ниже цели? – AHiggins

+0

Один флаг для каждого клиента. 1, если все еженедельные значения ниже среднего, а 0, если нет – Adam12344

ответ

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 
1

Чтобы получить больше ли все значения weekly_sales любое одно значение, вы можете сделайте что-нибудь подобное.

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

Если вы включаете, что в функцию, вы можете добавить вычисляемый столбец на [Table 1] вызвать функцию, основанную на avg_sales.

Смежные вопросы