首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >crosstab()查询移位列

crosstab()查询移位列
EN

Stack Overflow用户
提问于 2011-10-11 15:43:55
回答 1查看 566关注 0票数 1

我在postgres中使用交叉表函数。基本的SQL是:

代码语言:javascript
复制
select distinct  
       o_location,
       co_name,
       o_date,
       o_ndate,
       o_day,
       o_hour,
       o_type
  from outputs_txt
  left join courses on o_course = co_foreign
  left join locations on o_location = l_code
 where o_date = '2011-10-10' 
 order by o_hour

我的交叉表查询是

代码语言:javascript
复制
SELECT *
  FROM crosstab(
'SELECT DISTINCT
        COALESCE(o_location, '''')
       ,o_hour AS hour
       ,c.co_name
   FROM outputs_txt AS d
   LEFT JOIN courses AS c 
     on o_course = c.co_foreign
   LEFT JOIN locations as a 
     on o_location = a.l_code
  WHERE d.o_date = ''2011-10-10'''
)
AS ct(
 o_location varchar
,hour_0  varchar
,hour_1  varchar
,hour_2  varchar
,hour_3  varchar
,hour_4  varchar
,hour_5  varchar
,hour_6  varchar
,hour_7  varchar
,hour_8  varchar
,hour_9  varchar
,hour_10 varchar
,hour_11 varchar
,hour_12 varchar
,hour_13 varchar
,hour_14 varchar
,hour_15 varchar
,hour_16 varchar
,hour_17 varchar)

问题是结果都被左移了。

例如,如果某个位置的课程应该显示在hour_8上,它就会显示在hour_0中。

这适用于所有地点的所有课程。它们都左对齐。

我哪里做错了?

EN

回答 1

Stack Overflow用户

发布于 2011-10-11 16:10:40

由于没有样本数据,我只能猜测。下面是给我留下深刻印象的:

交叉表函数中没有ORDER BY。我添加了一个:

代码语言:javascript
复制
SELECT *
  FROM crosstab(
'SELECT DISTINCT
        COALESCE(o_location, '''')
       ,o_hour AS hour
       ,c.co_name
   FROM outputs_txt AS d
   LEFT JOIN courses AS c    ON o_course = c.co_foreign
   LEFT JOIN locations as a  ON o_location = a.l_code
  WHERE d.o_date = ''2011-10-10''
  ORDER BY 1,2'
)
AS ct(
 o_location varchar
,hour_0  varchar
,hour_1  varchar
,hour_2  varchar
,hour_3  varchar
,hour_4  varchar
,hour_5  varchar
,hour_6  varchar
,hour_7  varchar
,hour_8  varchar
,hour_9  varchar
,hour_10 varchar
,hour_11 varchar
,hour_12 varchar
,hour_13 varchar
,hour_14 varchar
,hour_15 varchar
,hour_16 varchar
,hour_17 varchar)

如果你想先订购hour_0,你必须按o_hour订购。我引用manual on crosstab functions的话

实际上,SQL查询应始终指定ORDER BY 1,2以确保输入行的顺序正确,也就是说,具有相同row_name的值被组合在一起并在行中正确排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7722824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档