Выбор максимального значения с приоритетом определенных значений - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть три таблицы, которые объединены.TableA имеет уникальные значения для Column1 (ID), который присоединяется к TableC на Column1, который имеет неуникальные значения.В настоящее время я присоединяюсь к ним на основе максимального значения для Column2 в TableC.Возвращение значения в TableB, которое просто соединяется с TableC.

Однако я хочу настроить это так, чтобы, если TableB.Column2 имеет любое значение больше 0 в TableC.Column2, это выбирается как максимальное значение,если оно равно 0, то максимальное значение обычно выбирается на основе числового значения.

Текущий запрос, который у меня есть, таков:

Select [TableA].Column2,
       FIRST_VALUE([TableB].Column2) OVER (PARTITION BY [TableA].Column2 ORDER BY MAX([TableC].Column2) Desc)
From [TableC] Left Join
     [TableA]
     On [TableA].Column1 = [TableC].Column1 Left Join
     [TableB]
      On [TableB].Column3 = [Table3].Column3

То, что я ожидаю, это то, что если:

TableC.Column2> '0', где TableB.Column2 = 'KEYVALUE', затем покажите Table.Column2 на основе TableC.Column3, однако если TableC.Column2 = '0', где TableB.Column2 = 'KEYVALUE'затем показать результат [TableB] .Column2 на основе MAX [TableC] .Column2

Образцы данных:

Sample Data

Пример вывода:

S7000, KEYVALUE

S6500, OTHERVALUE1

Надеюсь, что все имеет смысл, спасибо.

1 Ответ

1 голос
/ 02 апреля 2019

Мне трудно следовать вашим условиям, но вы, кажется, хотите apply:

Select a.*, bc.column2
From a outer apply
     (select top (1) b.column2
      from c join
           b 
           on c.column3 = b.column3
      where c.column1 = a.column1
      order by (case when c.column2 > 0 and b.column2 = 'KEYVALUE'
                     then 1
                     else 2
                end),
               c.column2 desc
     ) bc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...