Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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/7/sql-server/21.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_Sql Server - Fatal编程技术网

SQL数据透视和分组查询

SQL数据透视和分组查询,sql,sql-server,Sql,Sql Server,有人能帮我解决以下问题吗? 情况如下,我有下表: 信号名 价值 日期 报警 10 2020-01-01 警告 7. 2020-01-01 检查 4. 2020-01-01 报警 1. 2020-01-02 警告 4. 2020-01-02 检查 3. 2020-01-02 示例的pivot语法应该如下所示: SELECT * from(select * from table) src PIVOT (sum(value) FOR signalName in ([Alarm],[Warning],

有人能帮我解决以下问题吗? 情况如下,我有下表:

信号名 价值 日期 报警 10 2020-01-01 警告 7. 2020-01-01 检查 4. 2020-01-01 报警 1. 2020-01-02 警告 4. 2020-01-02 检查 3. 2020-01-02
示例的pivot语法应该如下所示:

SELECT *
from(select * from table) src 
PIVOT (sum(value) FOR signalName in ([Alarm],[Warning],[Check]))  pvt

您也可以使用max()代替sum()

示例中的pivot语法如下所示:

SELECT *
from(select * from table) src 
PIVOT (sum(value) FOR signalName in ([Alarm],[Warning],[Check]))  pvt

你也可以用max()代替sum()

这里我分享两种解决问题的方法:

模式:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
具有简单聚合和分组依据的查询:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
输出:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
价值警报 价值警告 价值检查 日期 10 7. 4. 2020-01-01 1. 4. 3. 2020-01-02
在这里,我分享两种解决您问题的方法:

模式:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
具有简单聚合和分组依据的查询:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
输出:

 create table mytable (signalName varchar(20),  value   int, date date)
 insert into mytable values('Alarm',    10, '2020-01-01');
 insert into mytable values('Warning',  7,  '2020-01-01');
 insert into mytable values('Check',    4,  '2020-01-01');
 insert into mytable values('Alarm',    1,  '2020-01-02');
 insert into mytable values('Warning',  4,  '2020-01-02');
 insert into mytable values('Check',    3,  '2020-01-02');
 select max(case when signalname='Alarm' then value end)ValueAlarm,
  max(case when signalname='Warning' then value end )ValueWarning,
   max(case when signalname='Check' then value end )ValueCheck,
   date
   from mytable
   group by date
   
价值警报 价值警告 价值检查 日期 10 7. 4. 2020-01-01 1. 4. 3. 2020-01-02
到目前为止你的尝试是什么?为什么你所做的一切都不起作用呢?那么你目前的努力如何呢?为什么你的东西不管用?