В основном у меня есть три таблицы со ссылками и пытаюсь получить результаты в одной таблице - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать запрос на выборку для приведенных ниже таблиц с помощью объединений, но я не получаю ожидаемых результатов при использовании базы данных postgresql.

Table1:

ID      |   cfname                  |
10000   |   "Sprint"                |
10001   |   "Epic Link"             |
10002   |   "Epic Status"           |
10003   |    "Epic Name"            |
10004   |    "Epic Color"           |
10005   |    "Rank"                 |
10006   |    "Story Points"         |
10007   |    "Approvals"            |
10008   |    "Request participants" |
10009   |    "Customer Request Type”|

Таблица2:

Customfield |   Stringvalue
10000       |   ""                      
10001       |   "10250"                     
10002       |   "10400"                     
10003       |   ""                      
10004       |   "Global Payroll Engine - Pi"
10005       |   "10504"                 
10006       |   “L12739"                
10007       |   "10202"                 
10008       |   "colours"   
10009       |   "watkinsh"              

Таблица3:

ID      |   Customvalue
10200   |   PSS
10202   |   Global
10250   |   Upmarket

10300   |   UAT
10350   |   Production
10400   |   QA (FIT)
10450   |   Staging (IAT)
10500   |   Splunk
10504   |   Database
10600   |   Reports

Я ищу таблицу результатов, как показано ниже:

Результат:

Cfname                 |  Stringvalue
"Sprint"               |  ""    
"Epic Link"            |  "Upmarket
"
"Epic Status"          |  "QA (FIT)"
"Epic Name"            |  ""        
"Epic Color"           |  "Global Payroll Engine - Pi"
"Rank"                 |  "Database"
"Story Points"         |  “L12739"
"Approvals"            |  "Global"
"Request participants" |  "colours"
"Customer Request Type”|  "watkinsh"

Может ли кто-нибудь помочь мне в запросе, чтобы получить правильные результаты в таблице.

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете использовать предложение CASE, чтобы найти значение, например:

SELECT cfname, 

CASE 
WHEN trim(table2.Stringvalue,'"') ~ '^([0-9]+)$' THEN (SELECT Customvalue FROM table3 WHERE table3.id=trim(table2.Stringvalue,'"')::int) 
ELSE table2.Stringvalue
END as Stringvalue

FROM table1 JOIN table2 ON (table1.id=table2.Customfield);
         cfname          |         stringvalue          
-------------------------+------------------------------
 "Sprint"                | ""
 "Epic Link"             | Upmarket
 "Epic Status"           | QA (FIT)
 "Epic Name"             | ""
 "Epic Color"            | "Global Payroll Engine - Pi"
 "Rank"                  | Database
 "Story Points"          | “L12739"
 "Approvals"             | "10202" 
 "Request participants"  | "colours"
 "Customer Request Type” | "watkinsh"
(10 filas)

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