Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一列中选择两个值_Sql_Select_Join - Fatal编程技术网

Sql 在一列中选择两个值

Sql 在一列中选择两个值,sql,select,join,Sql,Select,Join,我有三张桌子: MMP\u用户\u元数据\u实例 +----+---------------------------+------------------+-------------+---------+ | ID | INSTANCE_VALUE_VISIBILITY | NAME | METADATA_ID | USER_ID | +----+---------------------------+------------------+-------------+--

我有三张桌子:

MMP\u用户\u元数据\u实例

+----+---------------------------+------------------+-------------+---------+
| ID | INSTANCE_VALUE_VISIBILITY |       NAME       | METADATA_ID | USER_ID |
+----+---------------------------+------------------+-------------+---------+
|  3 |                         1 | dados-adicionais |           1 |       1 |
+----+---------------------------+------------------+-------------+---------+
+-------+--------+------------------+---------------------------+------------------+
|  ID   | VALUE  | METADATAENTRY_ID | USER_METADATA_INSTANCE_ID | ELEMENT_POSITION |
+-------+--------+------------------+---------------------------+------------------+
| 1,288 | Testes |               50 |                         3 |                0 |
| 1,289 | 16     |               51 |                         3 |                1 |
| 1,290 | Teste  |               52 |                         3 |                2 |
| 1,291 |        |               53 |                         3 |                3 |
| 1,292 | 44     |               54 |                         3 |                4 |
| 1,293 | 38     |               55 |                         3 |                5 |
| 1,294 |        |               56 |                         3 |                6 |
| 1,295 | Teste  |               57 |                         3 |                7 |
| 1,296 | 46     |               58 |                         3 |                8 |
| 1,297 | 46     |               59 |                         3 |                9 |
| 1,298 | Teste  |               60 |                         3 |               10 |
| 1,299 |        |               61 |                         3 |               11 |
| 1,300 | Teste  |               62 |                         3 |               12 |
| 1,301 | teste  |               63 |                         3 |               13 |
| 1,302 | teste  |               64 |                         3 |               14 |
+-------+--------+------------------+---------------------------+------------------+
MMP\u用户\u元数据\u指令值

+----+---------------------------+------------------+-------------+---------+
| ID | INSTANCE_VALUE_VISIBILITY |       NAME       | METADATA_ID | USER_ID |
+----+---------------------------+------------------+-------------+---------+
|  3 |                         1 | dados-adicionais |           1 |       1 |
+----+---------------------------+------------------+-------------+---------+
+-------+--------+------------------+---------------------------+------------------+
|  ID   | VALUE  | METADATAENTRY_ID | USER_METADATA_INSTANCE_ID | ELEMENT_POSITION |
+-------+--------+------------------+---------------------------+------------------+
| 1,288 | Testes |               50 |                         3 |                0 |
| 1,289 | 16     |               51 |                         3 |                1 |
| 1,290 | Teste  |               52 |                         3 |                2 |
| 1,291 |        |               53 |                         3 |                3 |
| 1,292 | 44     |               54 |                         3 |                4 |
| 1,293 | 38     |               55 |                         3 |                5 |
| 1,294 |        |               56 |                         3 |                6 |
| 1,295 | Teste  |               57 |                         3 |                7 |
| 1,296 | 46     |               58 |                         3 |                8 |
| 1,297 | 46     |               59 |                         3 |                9 |
| 1,298 | Teste  |               60 |                         3 |               10 |
| 1,299 |        |               61 |                         3 |               11 |
| 1,300 | Teste  |               62 |                         3 |               12 |
| 1,301 | teste  |               63 |                         3 |               13 |
| 1,302 | teste  |               64 |                         3 |               14 |
+-------+--------+------------------+---------------------------+------------------+
MMP\u元数据\u条目

+----+-----------+--------------------------+----------+------------+----------------+-------------+------------------+
| ID | INDEXABLE |           NAME           | REQUIRED | VALUE_TYPE | DOMAIN_LIST_ID | METADATA_ID | ELEMENT_POSITION |
+----+-----------+--------------------------+----------+------------+----------------+-------------+------------------+
| 50 |         0 | Skype                    |        0 |          4 | null           |           1 |                0 |
| 51 |         0 | Centro de Custo          |        1 |          7 | 32             |           1 |                1 |
| 52 |         0 | Endereço Bairro          |        0 |          2 | null           |           1 |                2 |
| 53 |         0 | Endereço Cidade          |        0 |          2 | null           |           1 |                3 |
| 54 |         0 | Estado Civil             |        1 |          7 | 34             |           1 |                4 |
| 55 |         0 | Filhos                   |        1 |          7 | 33             |           1 |                5 |
| 56 |         0 | Graduação Curso          |        0 |          2 | null           |           1 |                6 |
| 57 |         0 | Graduação Faculdade      |        0 |          2 | null           |           1 |                7 |
| 58 |         0 | Nivel de Idioma Inglês   |        1 |          7 | 1              |           1 |                8 |
| 59 |         0 | Nivel de Idioma Espanhol |        1 |          7 | 1              |           1 |                9 |
| 60 |         0 | Outro Idioma             |        0 |          2 | null           |           1 |               10 |
| 61 |         0 | Link Linkedin            |        0 |          3 | null           |           1 |               11 |
| 62 |         0 | Link Facebook            |        0 |          3 | null           |           1 |               12 |
| 63 |         0 | Esporte                  |        0 |          4 | null           |           1 |               13 |
| 64 |         0 | Time de Futebol          |        0 |          4 | null           |           1 |               14 |
+----+-----------+--------------------------+----------+------------+----------------+-------------+------------------+
我要加入:

SELECT i.USER_ID
    ,m_e.NAME
    ,v.VALUE
FROM MMP_USER_METADATA_INSTANCE i
LEFT JOIN MMP_USER_METADATA_INST_VALUE v ON (i.id = v.USER_METADATA_INSTANCE_ID)
LEFT JOIN MMP_METADATA_ENTRY m_e ON (v.METADATAENTRY_ID = m_e.id)
WHERE i.USER_ID = 1
上述查询的结果:

+---------+--------------------------+--------+
| USER_ID |           NAME           | VALUE  |
+---------+--------------------------+--------+
|       1 | Skype                    | Testes |
|       1 | Centro de Custo          | 16     |
|       1 | Endereço Bairro          | Teste  |
|       1 | Endereço Cidade          |        |
|       1 | Estado Civil             | 44     |
|       1 | Filhos                   | 38     |
|       1 | Graduação Curso          |        |
|       1 | Graduação Faculdade      | Teste  |
|       1 | Nivel de Idioma Inglês   | 46     |
|       1 | Nivel de Idioma Espanhol | 46     |
|       1 | Outro Idioma             | Teste  |
|       1 | Link Linkedin            |        |
|       1 | Link Facebook            | Teste  |
|       1 | Esporte                  | teste  |
|       1 | Time de Futebol          | teste  |
+---------+--------------------------+--------+
预期输出:

+---------+---------------+----------------------+-------------------------+---------------------+-------------------+-------------+---------------------+-----------------------------+-----------------------------+-------------------------------+----------------------+-------------------+-----------------------+-----------------+-------------------------+
| USER_ID |       1       |          2           |            3            |          4          |         5         |      6      |          7          |              8              |              9              |              10               |          11          |        12         |          13           |       14        |           15            |
+---------+---------------+----------------------+-------------------------+---------------------+-------------------+-------------+---------------------+-----------------------------+-----------------------------+-------------------------------+----------------------+-------------------+-----------------------+-----------------+-------------------------+
|       1 | Skype =Testes | Centro de Custo = 16 | Endereço Bairro = Teste | Endereço Cidade =   | Estado Civil = 44 | Filhos = 38 | Graduação Curso =   | Graduação Faculdade = Teste | Nivel de Idioma Inglês = 46 | Nivel de Idioma Espanhol = 46 | Outro Idioma = Teste | Link Linkedin =   | Link Facebook = Teste | Esporte = teste | Time de Futebol = teste |
+---------+---------------+----------------------+-------------------------+---------------------+-------------------+-------------+---------------------+-----------------------------+-----------------------------+-------------------------------+----------------------+-------------------+-----------------------+-----------------+-------------------------+

实际上,您正在对数据进行透视。以下是ANSI SQL,将在所有现代DBMS上使用

with data as (
  -- this is essentially your current query
  SELECT i.user_id,
         m_e.name,
         v.value, 

         -- this just gives every row a unique number
         row_number() over (partition by i.user_id order by m_e.name) as rn
  FROM mmp_user_metadata_instance i
    LEFT JOIN mmp_user_metadata_inst_value v ON (i.id = v.user_metadata_instance_id)
    LEFT JOIN mmp_metadata_entry m_e ON (v.metadataentry_id = m_e.id)
  WHERE i.user_id = 1
)
select user_id,
       max(case when rn =  1 then name||' = '||value end) as "1",
       max(case when rn =  2 then name||' = '||value end) as "2",
       max(case when rn =  3 then name||' = '||value end) as "3",
       max(case when rn =  4 then name||' = '||value end) as "4",
       max(case when rn =  5 then name||' = '||value end) as "5",
       max(case when rn =  6 then name||' = '||value end) as "6",
       max(case when rn =  7 then name||' = '||value end) as "7",
       max(case when rn =  8 then name||' = '||value end) as "8",
       max(case when rn =  9 then name||' = '||value end) as "9",
       max(case when rn = 10 then name||' = '||value end) as "10",
       max(case when rn = 11 then name||' = '||value end) as "11",
       max(case when rn = 12 then name||' = '||value end) as "12",
       max(case when rn = 13 then name||' = '||value end) as "13",
       max(case when rn = 14 then name||' = '||value end) as "14",
       max(case when rn = 15 then name||' = '||value end) as "15"
from data
group by user_id;
如果
value
可以
null
则需要将其包装成
coalesce()
以返回空字符串,否则“pivot”部分中的字符串串联也将产生空值


您必须定义列数的上限。SQL语言要求在运行查询之前定义查询的列数,因此无法使这些列成为动态的。

老实说,当我开始研究这个问题时,这让我很头疼。是否可以在不使用任何代码段的情况下重新格式化表,而将其替换为ASCII表?结果列中的行数在数量上似乎是动态的,这使得在不编写动态SQL的情况下使用数据透视表函数毫无意义@蓝脚怪在这些方面真的很好,有几个例子,所以。。。这里有一个例子:您使用的是哪种DBMS?博士后?甲骨文?@一匹没有名字的马,我需要所有的databases@FutbolFan我没有更改结构的权限