Как найти, какой столбец содержит значение c в каждой строке таблицы? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть таблица, в которой столбцы являются динамическими c, то есть, скажем, есть шесть столбцов C1, C2, C3, V1, V2, V3.

C1, C2, C3 содержит поле, и соответствующие значения вставляются в V1, V2, V3.

в одной строке field1 может быть в столбце C2, а соответствующее значение будет в V2. для определенного идентификатора (фиксированный столбец). в следующей строке field1 может быть в столбце C1, а соответствующее значение будет в V1 для другого идентификатора.

в этом сценарии, как мы можем найти, в каком столбце содержится поле1 для определенного идентификатора.

Sample Table Structure

Ожидаемый результат -

enter image description here

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Нормализованная схема может выглядеть примерно так ...

id  x c v   
111 1 3 30 
222 1 1 10 
333 1 2 20 

111 2 1 10
222 2 2 20
333 2 3 30

111 3 2 20
222 3 3 30
333 3 1 10

... где на (id, x)

может быть сформирован естественный PK
0 голосов
/ 18 марта 2020

в той же записи, поле1 может быть только в одном столбце Cx

SELECT id, CASE WHEN C1='Field1' THEN V1
                WHEN C2='Field1' THEN V2
                WHEN C3='Field1' THEN V3
                ELSE NULL
                END field1
FROM sourcetable
/* uncomment the next line 
   if 'Field1' value may be in none Cx column, 
   and you do not need in such records */
/* HAVING field1 IS NOT NULL */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...