Поиск первого значения поиска по столбцам и получение сведений о столбце, в котором оно было найдено - PullRequest
0 голосов
/ 21 сентября 2010

Мне было интересно, можно ли было определить, из какого столбца взято значение объединения?

У меня есть следующие данные в качестве примера (фактические годы колеблются от 1989 до 2010 года в данных, не показаны для краткости)

ID    |   2000  | 2000 value | 2001  |2001 value |  2002  |2002 value | 2003  |2003 value |  2004  | 2004 value | 2005 | 2005 value
id001 |  single | 15.46      |regular|50         | NULL   | 0         |single | 152       | regular|15.20       |single| 15.99
id002 | regular | 20.46      |regular|17.99      |single  | 150.23    |both   |  256.3    | NULL   |  0         | NULL |  0

Где один / обычный / оба отражают, как этот идентификатор платил за что-тов этом году (и NULL не представляет покупок).

В идеале я хотел бы иметь три столбца в год для 2005–2010 годов, в которых указывается последний тип единого платежа до этого года (и вв какой год он выпадает), а также столбец для обычного и обоих типов платежей

Так что для приведенного выше примера результаты будут выглядеть так:

ID    |   2005 prior single year  |  2005 prior regular year  |  2005 prior both year
id001 |   2003                    |  2004                     | NULL
id002 |   2002                    |  2001                     | 2003

Я также хотел бы иметь возможностьтакже вытащить соответствующие значения (для всех лет 2005-2010).

По сути, это всего лишь случай просмотра столбцов, чтобы найти первый экземпляр, но за пределами некоторого объединения я не уверен, каклучше всего подойти к этому!

Спасибо!:)

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Из существующей таблицы попробуйте:

select ID,
       case 'single'
           when [2004] then '2004'
           when [2003] then '2003'
           when [2002] then '2002'
           when [2001] then '2001'
           when [2000] then '2000'
           else NULL
       end [2005 prior single year],
       case 'regular'
           when [2004] then '2004'
           when [2003] then '2003'
           when [2002] then '2002'
           when [2001] then '2001'
           when [2000] then '2000'
           else NULL
       end [2005 prior regular year],
       case 'both'
           when [2004] then '2004'
           when [2003] then '2003'
           when [2002] then '2002'
           when [2001] then '2001'
           when [2000] then '2000'
           else NULL
       end [2005 prior both year]
from YourTable YT
1 голос
/ 21 сентября 2010

Сначала я бы написал представление для нормализации данных:

select  2000 as year
,       [2000 value] as value
,       [2000 type] as type
from    YourTable
where   year = 2000
union all
select  2001
,       [2001 value]
,       [2001 type]
from    YourTable
where   year = 2001
....

Тогда вы можете посмотреть первый год до 2005 года как:

select  a.year [prior to 2005]
,       a.value
,       a.id
from    YourView a
where   year = 
        (
        select  max(year) 
        from    YourView b 
        where   a.id = b.id 
                and a.type = b.type 
                and b.year < 2005
        )

Получив нормализованные данные, вы можете создать множество вариантов этой темы.

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