Как получить пару ключ-значение из базы данных с помощью SQL - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в SQL, поэтому, пожалуйста, помогите мне разобраться, как получить пару ключ-значение из SQL, например: Таблица A

A(PK)    B(INT)  C       D
------ ------- ------- --------

1        X       Y        Z

2        A       B        C

Я хочу вывод вформа

A = 1
B = X 
C = Y 
D = Z

я пробовал

SELECT A,B,C,D from tableA ; 

Но он печатает только в форме 1 XYZ Итак, вы можете мне помочь?

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вы можете выполнить объединение запросов, выбирая по одному столбцу за раз.

SELECT 'A', A from tableA WHERE ID = @ID
UNION
SELECT 'B', B from tableA WHERE ID = @ID
UNION
SELECT 'C', C from tableA WHERE ID = @ID
UNION
SELECT 'D', D from tableA WHERE ID = @ID

Вам, вероятно, потребуется привести все столбцы к общему типу (varchar), чтобы это работало.

0 голосов
/ 17 сентября 2018

Другой вариант - создать функцию, которая возвращает желаемый результат:

create type crosstab_type as (row_num bigint, column_name text, value text);

create or replace function kv()
  returns setof crosstab_type
as
$$
declare 
  l_rec record;
  l_row bigint := 1;
begin
  for l_rec in select * from ani 
  loop
    return next (l_row, 'a', l_rec.a::text)::crosstab_type;
    return next (l_row, 'b', l_rec.b::text)::crosstab_type;
    return next (l_row, 'c', l_rec.c::text)::crosstab_type;
    return next (l_row, 'd', l_rec.d::text)::crosstab_type;
    l_row := l_row + 1;
  end loop;
end;
$$
language plpgsql;



select *
from kv();

возвращает:

row_num | column_name | value
--------+-------------+------
      1 | a           | 1    
      1 | b           | X    
      1 | c           | Y    
      1 | d           | Z    
      2 | a           | 2    
      2 | b           | A    
      2 | c           | B    
      2 | d           | C   

Онлайн пример: http://rextester.com/RCKB51862

0 голосов
/ 17 сентября 2018

Обычно получение имен столбцов вместе со значениями строк и форматирование результата - это то, что клиент SQL предоставляет для вас. pgAdmin не очень подходит для этого, язык программирования был бы лучше.

Например, вот как вы можете это сделать, используя Ruby и ruby-pg gem .

#!/usr/bin/env ruby

require 'pg'

conn = PG.connect( dbname: 'test' )
conn.exec( "SELECT * FROM tableA" ) do |result|
  result.each do |row|
    row.each do |column,value|
      puts "#{column} = #{value}"
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...