2016-09-07 2 views
0

Это мой SQL-запрос, и я хочу, чтобы эти результаты отображались вертикально. Я также искал google для этого, где я нашел, чтобы включить режим переключения, используя \x\g\x, но я не знаю, где поставить этот синтаксис. Пожалуйста, помогите, чтобы получить такой вывод:Как отобразить результат моего запроса по вертикали в postgresql?

enter image description here

Но этот мой запрос дает такой вывод:

enter image description here

   select 
      round(
      100.00 * 
      (sum(case when "WELL_AGE" <= '5' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" <= '5' then 1 else 0 end)),1) conc_arscbelow5_wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '6' AND "WELL_AGE" <= '10' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '6' AND "WELL_AGE" <= '10' then 1 else 0 end)),1) conc_arscbet6_10wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '11' AND "WELL_AGE" <= '15' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '11' AND "WELL_AGE" <= '15' then 1 else 0 end)),1) conc_arscbet11_15_wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '16' AND "WELL_AGE" <= '30' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '16' AND "WELL_AGE" <= '30' then 1 else 0 end)),1) conc_arscbet16_30wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" >= '31' AND "WELL_AGE" <= '50' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" >= '31' AND "WELL_AGE" <= '50' then 1 else 0 end)),1) conc_arscbet31_50wellageGrp, 

      round(
      100.00 * 
      (sum(case when "WELL_AGE" > '50' AND "CONC_ARSC" <= '10' then 1 else 0 end))/(sum(case when "WELL_AGE" > '50' then 1 else 0 end)),1)conc_arscabove50_wellageGrp 


      from public."Arsenic_Test"; 
+0

Посмотрите этот http://stackoverflow.com/questions/23060256/postgres-transpose-rows-to-columns –

+1

Команда '\ x' действительна только для клиента командной строки' psql' и будет просто «вращать» вывод любого SQL-запроса. Нет никакой метакоманды 'psql'' \ x \ g \ x'. '\ g' запустит инструкцию из буфера редактирования. –

+0

Итак, что я должен сделать, чтобы достичь моих потребностей? –

ответ

0

Я надеюсь, что это будет соответствовать вашим требованиям.

Использование hstore:

with t as (SELECT '80.13' aS "0-5", '80.7' AS "6-10", '81.6' AS "11-15", '84.27' AS "16-30", '84.04' AS "31-50", '85.33' AS ">50") 
SELECT * 
FROM (SELECT (each(hstore(t))).* FROM t) AS tmp (well_age, below10_conc_arsc_wells) 

Replace т с таблицей. Использование : JSON

with t as (SELECT '80.13' aS "0-5", '80.7' AS "6-10", '81.6' AS "11-15", '84.27' AS "16-30", '84.04' AS "31-50", '85.33' AS ">50") 
SELECT * 
FROM (SELECT (json_each_text(row_to_json(t))).* FROM t) AS tmp (well_age, below10_conc_arsc_wells) 
0

Используйте range type группе на:

with r (r,s) as (values 
    (int4range(null,5,'[]'), '0 - 5'), 
    (int4range(6,10,'[]'), '6 - 10'), 
    (int4range(11,15,'[]'), '11 - 15'), 
    (int4range(16,30,'[]'), '16 - 30'), 
    (int4range(31,50,'[]'), '31 - 50'), 
    (int4range(50,null,'(]'), '>50') 
) 
select s, 100* count("CONC_ARSC" <= '10' or null)/count(*) 
from 
    public."Arsenic_Test" 
    inner join 
    r on "WELL_AGE" <@ r 
group by s; 
Смежные вопросы