Отображать поля подряд - PullRequest
3 голосов
/ 08 мая 2019

У меня есть запрос множественного выбора

SELECT C.CATEGORIES_NAME 
FROM CATEGORIES AS C 
WHERE CATEGORIES_ID = 1

UNION

SELECT L.LOCATION_TYPE_NAME 
FROM LOCATIONS_TYPE AS L 
WHERE LOCATION_TYPE_ID = 2 

UNION

SELECT S.SUBSCRIPTION_TYPE 
FROM SUBSCRIPTIONS AS S 
WHERE SUBSCRIPTION_ID = 3

Он дает мне результат:

 CATEGORIES_NAME |
------------------
       free      |
       Plaza     |
      Mobiles    |

И мне нужно получить такой результат:

 CATEGORIES_NAME | LOCATION_TYPE_NAME | SUBSCRIPTION_TYPE |
-----------------------------------------------------------
       free      |       Plaza        |      Mobiles      |

Как это можно сделать?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Я думаю, что самое простое решение - это поставить SELECT перед запросами:

SELECT (SELECT C.CATEGORIES_NAME 
        FROM CATEGORIES AS C 
        WHERE CATEGORIES_ID = 1
       ) as CATEGORIES_NAME,
       (SELECT L.LOCATION_TYPE_NAME 
        FROM LOCATIONS_TYPE AS L 
        WHERE LOCATION_TYPE_ID = 2
       ) as LOCATION_TYPE_NAME,
       (SELECT S.LOCATION_TYPE_NAME 
        FROM SUBSCRIPTIONS AS S 
        WHERE SUBSCRIPTION_ID = 3
       ) as LOCATION_TYPE_NAME;
1 голос
/ 08 мая 2019

Используйте crosstab() - для справки вы можете проверить детали здесь

CREATE EXTENSION tablefunc;
    SELECT *
    FROM crosstab(
        'SELECT C.CATEGORIES_NAME 
    FROM CATEGORIES AS C 
    WHERE CATEGORIES_ID = 1

    UNION

    SELECT L.LOCATION_TYPE_NAME 
    FROM LOCATIONS_TYPE AS L 
    WHERE LOCATION_TYPE_ID = 2 

    UNION

    SELECT S.SUBSCRIPTION_TYPE 
    FROM SUBSCRIPTIONS AS S 
    WHERE SUBSCRIPTION_ID = 3'
    ) AS ct(CATEGORIES_NAME text, LOCATION_TYPE_NAME text, SUBSCRIPTION_TYPE text)
...