Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql crosstab()查询移动列_Sql_Postgresql_Crosstab - Fatal编程技术网

Sql crosstab()查询移动列

Sql crosstab()查询移动列,sql,postgresql,crosstab,Sql,Postgresql,Crosstab,我在postgres中使用交叉表函数。基本SQL是: 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_locat

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

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
我的交叉表查询是

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\u 8
上显示,则它将在
hour\u 0
中显示
这适用于所有地点的所有课程。他们都是左对齐的


我哪里出错了?

因为没有样本数据,我只能猜测。以下是让我印象深刻的:
交叉表函数中没有按排序的
。我加了一条:

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\u 0
首先,您必须按
o\u hour
订购。我引述:

在实践中,SQL查询应始终按1,2指定顺序,以确保 输入行的顺序是否正确,也就是说,值的顺序是否正确 将相同的行名称放在一起,并在 划船


由于没有样本数据,我只能猜测。以下是让我印象深刻的:
交叉表函数中没有按
排序的
。我加了一条:

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\u 0
首先,您必须按
o\u hour
订购。我引述:

在实践中,SQL查询应始终按1,2指定顺序,以确保 输入行的顺序是否正确,也就是说,值的顺序是否正确 将相同的行名称放在一起,并在 划船


按订单似乎没有任何效果。按订单似乎没有任何效果。我得到你的位置一小时0小时1小时2小时3小时4…小时17。。。。11 sub1 sub1 sub1 sub2 sub3''22 subX subX subY subY subY''当我应该得到像o_位置小时_0小时_1小时_2小时_3小时_4小时_5小时_6……小时_17。。。。11 sub1 sub1 sub1 sub2 sub3 22 subX subX subY subYsubY@Yebach:请用适当的格式编辑您的问题。这太难破译了。按部就班似乎没有任何效果。按部就班似乎没有任何效果。我得到你的位置一小时0小时1小时2小时3小时4…小时17。。。。11 sub1 sub1 sub1 sub2 sub3''22 subX subX subY subY subY''当我应该得到像o_位置小时_0小时_1小时_2小时_3小时_4小时_5小时_6……小时_17。。。。11 sub1 sub1 sub1 sub2 sub3 22 subX subX subY subYsubY@Yebach:请用适当的格式编辑您的问题。那太难破译了。