显示一行中的字段
Display fields in a row
我有多个 select 查询
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 |
如何做到这一点?
使用 crosstab()
- 作为参考,您可以查看详细信息 here
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)
我认为最简单的解决方案基本上是在查询之前放置 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;
我有多个 select 查询
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 |
如何做到这一点?
使用 crosstab()
- 作为参考,您可以查看详细信息 here
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)
我认为最简单的解决方案基本上是在查询之前放置 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;