Нужна sql или хранимая процедура для получения данных в соответствии с флагом? - PullRequest
0 голосов
/ 18 октября 2018

Например, у меня есть Имя таблицы_Тип, как показано ниже -

+--------------+----------+
| Name_Type_Id |  Code    |
+--------------+----------+
|            1 |   AN     |
|            2 |   BN     |
|            3 |   CN     |
|            4 |   DN     |
|            5 |   EN     |
|            6 |   FN     |
+--------------+----------+

Вторая таблица Таблица_А, как показано ниже -

+-------+---------+--------------+------------------+
|  T_ID | T_Value | Name_Type_Id | Name_Type_Value  |
+-------+---------+--------------+------------------+
|  T1   |  A      |            1 |               1  |
|  T1   |  B      |            3 |               0  |
|  T2   |  A      |            2 |               1  |
|  T2   |  B      |            5 |               1  |
|  T2   |  C      |            6 |               1  |
|  T3   |  A      |            1 |               0  |
|  T3   |  B      |            6 |               1  |
|  T4   |  A      |            1 |               0  |
|  T5   |  A      |            2 |               1  |
+-------+---------+--------------+------------------+

Нужно установить результат, как показано ниже -

+-------+---------+------+------+-------+-----+
| T_ID  | T_Value | AN   |  BN  |   EN  |  FN |
+-------+---------+------+------+-------+-----+
|    T1 |  A      |  1   |   0  |   0   |   0 |
|    T1 |  B      |  0   |   0  |   0   |   0 |
|    T2 |  A      |  0   |   1  |   0   |   0 |
|    T2 |  B      |  0   |   0  |   1   |   0 |
|    T2 |  C      |  0   |   0  |   0   |   1 |
|    T3 |  A      |  0   |   0  |   0   |   0 |
|    T3 |  B      |  0   |   0  |   0   |   1 |
|    T4 |  A      |  0   |   0  |   0   |   0 |
|    T5 |  A      |  0   |   1  |   0   |   0 |
+-------+---------+------+------+-------+-----+

Desc - Здесь во Второй таблице Table_A T_ID & T_Value уникальна.Мне нужен name_type_code как имя столбца в результате только для которого значение "1" присутствует в table_A.Ex.Как и для name_type_code "DN", нет никакого значения для любого T_ID. То же самое для CN, так как у нас есть значение "0", поэтому мы не хотим.

1 Ответ

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

Вы можете использовать decode как:

select a.t_id, a.T_Value,
       decode(n.code,'AN',a.value,0) as "AN",
       decode(n.code,'BN',a.value,0) as "BN",
       decode(n.code,'EN',a.value,0) as "EN",
       decode(n.code,'FN',a.value,0) as "FN"
  from Table_A a
  left join Name_Type n 
    on ( n.name_type_id = a.name_type_id )    
  group by a.t_id, a.T_Value, a.value, n.code  
  order by a.t_id, a.T_Value;

  T_ID  T_VALUE AN  BN  EN  FN
   T1       A   0   0   0   0
   T1       B   1   0   0   0
   T2       A   0   1   0   0
   T2       B   0   0   1   0
   T2       C   0   0   0   1
   T3       A   0   0   0   0
   T3       B   0   0   0   1
   T4       A   0   0   0   0
   T5       A   0   1   0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...