2016-05-14 59 views
0

如何在PostgreSQL中使用交叉表函数,我尝试了自己的查询但仍无法正常工作。我有以下表格:如何在PostgreSQL中创建交叉表查询

sampling_point time_sampling entero sampling_type 
    wall    06:53   50 Environment 
    floor   09:21   50 Environment 
    wall    09:22   50 Environment 
    wall    09:23   50 Environment 
    floor   06:52   10 Environment 
    wall    06:53   50 Environment 
    floor   06:32   10 Environment 
    wall    06:33   50 Environment 
    floor   06:32   50 Environment 
    wall    06:33   50 Environment 
    floor   06:52   50 Environment 
    floor   09:22   50 Environment 

,我想创建查询返回以下交叉:

sampling_point time_sampling entero_floor entero_wall 
    wall    06:53       50  
    wall    09:22       50  
    wall    09:23       50  
    wall    06:53       50  
    wall    06:33       50  
    wall    06:33       50  
    floor   09:21   50      
    floor   06:52   10      
    floor   06:32   10      
    floor   06:32   50 
    floor   06:52   50 
    floor   09:22   50 

我使用交叉()有两个参数是这样的:

SELECT * FROM crosstab 
    (
     'SELECT c.sampling_date, c.sampling_point, c.time_sampling, c.ha_entero 
     FROM (select t066dtl.*, t066hdr.* from tblfrmintqad066dtl t066dtl 
         JOIN tblfrmintqad066hdr t066hdr ON t066hdr.headerid = t066dtl.headerid AND t066dtl.status= 1) c 
     ORDER BY 1,2', 
      $$VALUES ('floor'::text),('wall'::text)$$ 
    ) 
    AS ct (sampling_point varchar, floor varchar, wall varchar) c.sampling_date = '2016-05-12'; 

在此先感谢。

+0

这只是一个简单的条件'CASE WHEN'。 – Parfait

+0

所以我不必使用交叉表?你可以举一些例子如何使用'CASE WHEN' – metaphor

回答

0

只需使用CASE WHEN条件表达式:

SELECT sampling_point, time_sampling, 
     CASE WHEN sampling_point = 'floor' THEN entero ELSE NULL END AS entero_floor, 
     CASE WHEN sampling_point = 'wall' THEN entero ELSE NULL END AS entero_wall 
FROM SourceTable 
ORDER BY sampling_point DESC; 
+0

哦,谢谢你,它完美的作品。 – metaphor