Оценить несколько строк и свернуть в новый столбец - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь оценить значения из столбца, чтобы определить значение для каждого поднабора строк.Проще объяснить ...

select distinct
    app_id,
    asset_id,
    asset_migration_scope
from
    table

Вот пример вывода:

app_ID   asset_id   asset_migration_scope

123      asset1     Migrating

123      asset2     Migrating

123      asset3     Not Migrating

456      asset1     Migrating

456      asset2     Migrating

789      asset1     Not Migrating

789      asset2     Not Migrating

Что я хотел бы сделать, это создать четвертый столбец, который сворачивает их.Если все активы для данного идентификатора приложения = Миграция, значение для каждой строки для этого идентификатора приложения будет Миграция.Если это смесь Миграция / Не Миграция, мы бы назвали это Гибридом.Все "не мигрирует", это будет "не мигрирует"

Результат будет выглядеть следующим образом:

app_ID   asset_id   asset_migration_scope    app_migration_scope

123      asset1     Migrating                Hybrid

123      asset2     Migrating                Hybrid

123      asset3     Not Migrating            Hybrid

456      asset1     Migrating                Migrating

456      asset2     Migrating                Migrating

789      asset1     Not Migrating            Not Migrating

789      asset2     Not Migrating            Not Migrating

Как я могу сделать это свертку, чтобы мы смотрели на каждогокомбинация app_id + asset_id с соответствующими значениями asset_migration_scope для определения единственного значения для столбца app_migration_scope на основе app_id?

Огромное спасибо заранее!

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете использовать case выражение с агрегацией:

SELECT t.app_id, t.asset_id, t.asset_migration_scope,
       (CASE WHEN mn_scope <> mx_scope 
             THEN 'Hybrid' 
             WHEN (mn_scope = mx_scope AND mn_scope = 'Migrating')
             THEN 'Migrating'
             WHEN (mn_scope = mx_scope AND mn_scope = 'Not Migrating')
             THEN 'Not Migrating'
        END) AS app_migration_scope 
FROM table t CROSS APPLY
     (SELECT MIN(t1.asset_migration_scope) AS mn_scope, MAX(t1.asset_migration_scope) AS mx_scope
      FROM table t1
      WHERE t1.app_ID = t.app_ID
     ) t1;

Однако, DISTINCT будет преодолено, поскольку ваши данные выборки не предлагают мне использовать DISTINCT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...