Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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按列分组行_Sql_Group By_Rows - Fatal编程技术网

sql按列分组行

sql按列分组行,sql,group-by,rows,Sql,Group By,Rows,我有一张桌子: ID Status Date 1 Stop 01.01.2001 1 Run 02.01.2002 2 Stop 03.01.2003 2 Run 04.01.2004 我想将行分组如下: ID Stop Run 1 01.01.2001 02.01.2002 2 03.01.2003 04.01.2004 创建此组的最佳方法是什么?使

我有一张桌子:

ID    Status    Date
1     Stop      01.01.2001
1     Run       02.01.2002
2     Stop      03.01.2003
2     Run       04.01.2004
我想将行分组如下:

ID    Stop         Run    
1     01.01.2001   02.01.2002
2     03.01.2003   04.01.2004

创建此组的最佳方法是什么?

使用下面的查询,使用

select id,
       max(case when status = 'Stop' then date end) as stop,
       max(case when status = 'Run' then date end) as run
from your_table
group by id
个案及分组 为了使用GROUPBY,您需要使用一些聚合函数。因此,可以使用最小值或最大值


查询测试数据:

with my_table as
(
    select 1 id,      'Stop' action,       '01.01.2001' dateval from dual
    union 
    select 1 id,      'Run' action,       '02.01.2002' dateval from dual
    union 
    select 2 id,      'Stop' action,       '03.01.2003' dateval from dual
    union 
    select 2 id,      'Run' action,       '04.01.2004' dateval from dual
)
select ID,
 MIN(case when action = 'Stop' then dateval end) STOP,
 MIN(case when action = 'Run' then dateval end) RUN
from my_table
group by id
使用

ORACLE的透视功能 ,也可以使用以下查询完成此操作:

SELECT *
FROM   (SELECT ID,dateval,action
        FROM   my_table)
PIVOT  (max(dateval) FOR (action) IN ('Stop' AS STOP, 'Run' AS RUN));

查询测试数据

with my_table as
(
select 1 id,      'Stop' action,       '01.01.2001' dateval from dual
union 
select 1 id,      'Run' action,       '02.01.2002' dateval from dual
union 
select 2 id,      'Stop' action,       '03.01.2003' dateval from dual
union 
select 2 id,      'Run' action,       '04.01.2004' dateval from dual
)

SELECT *
FROM   (SELECT ID,dateval,action
        FROM   my_table)
PIVOT  (max(dateval) FOR (action) IN ('Stop' AS STOP, 'Run' AS RUN));

我在IN语句中发现一个错误:“1附近的语法不正确。应为ID、带引号的ID或”“。”
with my_table as
(
select 1 id,      'Stop' action,       '01.01.2001' dateval from dual
union 
select 1 id,      'Run' action,       '02.01.2002' dateval from dual
union 
select 2 id,      'Stop' action,       '03.01.2003' dateval from dual
union 
select 2 id,      'Run' action,       '04.01.2004' dateval from dual
)

SELECT *
FROM   (SELECT ID,dateval,action
        FROM   my_table)
PIVOT  (max(dateval) FOR (action) IN ('Stop' AS STOP, 'Run' AS RUN));