Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложный запрос на простом примере  [new]
программист не БД
Guest
Друзья, добрый день!

Есть таблица след. структурой:
  • столбцы NumberA, NumberB - числа от 1 до 15
  • столбцы NameA, NameB - символьные значения
  • столбец SelectName- имеет значения "A" или "B"
  • столбец Result - 0 или 1
  • столбец Year - год

    Например:
    NumberA NameA NumberB NameB SelectName Result Year
    2Имя А 12 Имя Б A 1 2017
    15 Имя А 7 Имя Б A 0 2017
    9 Имя В 4 Имя А B 1 2017
    11 Имя Б 14 Имя Г А 1 2017


    Задача.
    Для каждой записи анализируется значение столбца SelectName. Если значение "А", то для анализа берется значения полей NumberA, NameA, если "В", то NumberB, NameB.
    В итоге необходимо следующее:
  • Год
  • Имя
  • Диапазон от 1 до 10 Общее кол-во.
  • Диапазон от 1 до 10 Кол-во результативных. (где Result = 1)
  • Диапазон от 11 до 15 Общее кол-во.
  • Диапазон от 11 до 15 Кол-во результативных. (где Result = 1)

    Т.е. для нашего примера, должно получиться:
    Год Имя Диапазон от 1 до 10 Общее кол-во Диапазон от 1 до 10 Кол-во результативных Диапазон от 11 до 15 Общее кол-во Диапазон от 11 до 15 Кол-во результативных
    2017 Имя А 2 2 1 0
    2017 Имя Б 0 0 1 1


    Подскажите, пожалуйста, как такое лучше сделать?
  • 21 ноя 17, 18:55    [20973282]     Ответить | Цитировать Сообщить модератору
     Re: Сложный запрос на простом примере  [new]
    Andy_OLAP
    Member

    Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
    Сообщений: 3151
    программист не БД
    Если значение "А", то для анализа берется значения полей NumberA, NameA, если "В", то NumberB, NameB.
    Подскажите, пожалуйста, как такое лучше сделать?

    Таки вариантов у Вас меньше, чем 2.
    select
    [Year] as [Год]
    ,[Result] as [Result]
    ,case when [SelectName] = 'A' then [NameA] else [NameB] end as [Имя]
    ,case when [SelectName] = 'A' then [NumberA] else [NumberB] end as [ЧислоДляПодсчета]
    from [Таблица]
    

    И далее поверх подзапроса начинаете группировать и считать.
    21 ноя 17, 19:33    [20973375]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить