Я хочу отчет на основе этих 2 таблиц - PullRequest
1 голос
/ 19 февраля 2020
   create table label_table(
   label_id number not null,
   label_name varchar2(50),
   no_months number not null,
   no_of_mobile_sims number not null,
   no_of_services number not null,
   delayed number not null,
   value_of_client number(6,2),
   constraint pk PRIMARY KEY(label_id)
   );

   create table client(
   customer_id number not null,
   customer_name varchar2(50) not null,
   no_months number not null,
   no_of_mobile_sims number not null,
   no_of_services number not null,
   delayed number not null,
  value_of_client number(6,2),
  constraint pk_key PRIMARY KEY(customer_id)
  ) ;


  SELECT
   l.label_id,
   l.label_name,
   k.customer_id,
   k.customer_name
   FROM
   label_table   l
   inner JOIN client k ON k.value_of_client>l.value_of_client                                        
   ORDER BY 1;

Если мы делаем выборку * из клиента, у нас есть этот вывод:

13 x_name        3                 4              2           0           74.38

И если мы делаем выборку * из label_table, мы выводим:

1 Diamond                  2                 2              2          0              70
2 Gold                     2                 1              2          2              50

У нас есть наш клиент x_name, который присоединился к нашей телефонной компании, скажем, и я хочу получить отчет, в котором будет сказано, что x_name - это клиент с бриллиантами, основанный на сравнении общих столбцов этих двух таблиц, и я хочу получить такой вывод:

13 x_name Diamond

И я хочу сделать это с помощью объединения, но проблема заключается в том, что каждый раз, когда я пытаюсь, мой клиент будет идентифицироваться с обеими метками, потому что он уважает условия (>, <,! =, =) обеих меток. Идея заключается в том, что у меня есть 16 клиентов, которые имеют разные значения, и я хочу поместить каждого из них в уникальный ярлык, а не более, основываясь на этих 2 таблицах. Например, client.no_of_months> label.table.no_of_months, client.value_of_client> label.client.value_of_client, а затем метка, но, как я сказал выше, мне нужно, чтобы каждый клиент был в своей первой метке выбора, если клиент является ромбом, вывод будет алмаз не алмаз, золото, серебро, бронза, даже если он тоже может быть на этих ярлыках.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020
  SELECT
  k.customer_id,
  k.customer_name,
  l.label_name
  FROM
  label_table   l
  right JOIN client k ON k.value_of_client != l.value_of_client
where l.label_id=(case when k.value_of_client>(select value_of_client from label_table where label_id=1)
                   and  k.delayed=(select delayed from label_table where label_id=1)
                   and k.no_months >(select no_months from label_table where label_id=1)
                   and k.no_of_services>=(select no_of_services from label_table where label_id=1)
                   and k.no_of_mobile_sims>=(select no_of_mobile_sims from label_table where label_id=1)
                   then 1

                   when k.value_of_client > (select value_of_client from label_table where label_id=2) 
                   and  k.delayed<(select delayed from label_table where label_id=2)
                   and k.no_months >=(select no_months from label_table where label_id=2)
                   and k.no_of_services>=(select no_of_services from label_table where label_id=2)
                   and k.no_of_mobile_sims>(select no_of_mobile_sims from label_table where label_id=2)
                   then 2

                   when k.value_of_client>(select value_of_client from label_table where label_id=3)
                   and  k.delayed<(select delayed from label_table where label_id=3)
                   and  k.no_months >(select no_months from label_table where label_id=3)
                   and  k.no_of_services>(select no_of_services from label_table where label_id=3)
                   and  k.no_of_mobile_sims>(select no_of_mobile_sims from label_table where label_id=3)
                   then 3
                   else 4
                   end)
ORDER BY 1;
0 голосов
/ 19 февраля 2020

Полагаю, вы можете попробовать запрос ниже -

SELECT customer_id, customer_name, label_name
FROM (SELECT k.customer_id,
             k.customer_name,
             l.label_name,
             ROW_NUMBER() OVER(PARTITION BY k.customer_id ORDER BY l.value_of_client DESC) RN
      FROM label_table   l
      inner JOIN client k ON k.value_of_client>l.value_of_client)
WHERE RN = 1
ORDER BY 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...