SQL数据透视和分组查询
有人能帮我解决以下问题吗? 情况如下,我有下表: 信号名 价值 日期 报警 10 2020-01-01 警告 7. 2020-01-01 检查 4. 2020-01-01 报警 1. 2020-01-02 警告 4. 2020-01-02 检查 3. 2020-01-02SQL数据透视和分组查询,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],
示例的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
到目前为止你的尝试是什么?为什么你所做的一切都不起作用呢?那么你目前的努力如何呢?为什么你的东西不管用?