问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql 按照小时分组查询并统计

发布网友 发布时间:2022-04-11 14:28

我来回答

6个回答

热心网友 时间:2022-04-11 15:57

-- 模拟销售的表.
CREATE TABLE #temp (
  [销售时间]  datetime,
  [销量]      int,
  [实销]      int
)
go


-- 由于  成本与毛利, 我估计应该是在另外一个表里面的, 这里就不模拟了
INSERT INTO #temp
-- 9点的
SELECT '2013-07-16 09:55:15', 9,  900      UNION ALL
-- 10点的
SELECT '2013-07-16 10:15:15', 1,  100      UNION ALL
SELECT '2013-07-16 10:25:15', 15, 1500     UNION ALL
SELECT '2013-07-16 10:35:15', 10, 1000     UNION ALL
-- 11点的
SELECT '2013-07-16 11:15:15', 1,  100      UNION ALL
SELECT '2013-07-16 11:25:15', 2,  200      UNION ALL
SELECT '2013-07-16 11:35:15', 3,  300      UNION ALL
SELECT '2013-07-16 11:45:15', 4,  400      UNION ALL
SELECT '2013-07-16 11:55:15', 5,  500      UNION ALL
-- 其他的.
SELECT '2013-07-16 12:15:15', 12, 1200    UNION ALL
SELECT '2013-07-16 13:15:15', 13, 1300    UNION ALL
SELECT '2013-07-16 14:15:15', 14, 1400    UNION ALL
-- 中间缺少 15点与16点的
SELECT '2013-07-16 17:15:15', 17, 1700    UNION ALL
SELECT '2013-07-16 18:15:15', 18, 1800;
go



SELECT
  ISNULL(Convert(varchar(2), sv.number) + '-' + Convert(varchar(2), sv.number + 1), '合计') AS [销售时段],
  SUM([销量])  AS  [销量],
  SUM([实销])  AS  [实销],
  (SELECT SUM([实销])  FROM  #temp  t2  WHERE  DATEPART(hh, t2.[销售时间]) <= ISNULL(sv.number, 23) )  AS [累计实销]
FROM
  master..spt_values  sv
    JOIN  #temp  t
  ON (sv.number =  DATEPART(hh, t.[销售时间]))
WHERE
  sv.type='P'
  AND sv.number >=9 
  AND sv.number <20
GROUP BY
  sv.number  WITH  rollup
GO


销售时段  销量          实销          累计实销
----- ----------- ----------- -----------
9-10            9         900         900
10-11          26        2600        3500
11-12          15        1500        5000
12-13          12        1200        6200
13-14          13        1300        7500
14-15          14        1400        8900
17-18          17        1700       10600
18-19          18        1800       12400
合计            124       12400       12400

(9 行受影响)




这样行么?

热心网友 时间:2022-04-11 17:15

1、创建表Sale_Order 主键Order_No,这个表存储日常的销售数据;
CREATE TABLE dbo.SALE_ORDER
(
Order_No NVARCHAR (6) NOT NULL,
Sale_Date DATETIME,
Sale_Qty INT,
Sale_Amount UMERIC (18, 2),
Sale_Cost UMERIC (18, 2),
CONSTRAINT PK_Comm_Area PRIMARY KEY (Order_No)
);
GO

2、创建存储过程up_Sale_Gross_Profit 获取需要的结果;
CREATE PROCEDURE dbo.up_Sale_Gross_Profit
(
@SaleDate DATETIME--日期条件
)
WITH EXECUTE AS 'dbo'
AS
BEGIN
--创建承载明细账的临时表,这里可以通过很多查询方法实现,
--不过通过临时表可以充分利用Update的游标功能提升查询性能,数据量越大性能提升的就越明显;
CREATE TABLE #temp_Sale_Gross_Profit
(
Period NVARCHAR (6) NOT NULL,
Sale_Qty INT,
Sale_Amount UMERIC (18, 2),
Sale_CostUMERIC (18, 2),
Total_AmountUMERIC (18, 2),
Total_Cost UMERIC (18, 2),
Gross_Profit UMERIC (18, 2)
);

--获取指定销售时段的销量与实销数,这里销售时段按小时计算
Insert Into #temp_Sale_Gross_Profit
Select convert(VARCHAR(10),DatePart(hh,Sale_Date))+'-'+convert(VARCHAR(10),DatePart(hh,Sale_Date)+1),
SUM(Sale_Qty),SUM(Sale_Amount),SUM(Sale_Cost),0,0,0
From SALE_ORDER Where Sale_Date = @SaleDate
Group By DatePart(hh,Sale_Date)
Order By DatePart(hh,Sale_Date);

--定义累计实销与累计成本的变量
Declaer @Total_Amount UMERIC (18, 2);
Declaer @Total_Cost UMERIC (18, 2);
Set @Total_Amount = 0;
Set @Total_Cost = 0 ;
--利用Update游标计算结果(很神奇不是吗?呵呵)
Update #temp_Sale_Gross_Profit
Set @Total_Amount = @Total_Amount + Sale_Amount,
@Total_Cost = @Total_Cost + Sale_Cost,
Total_Amount = @Total_Amount,
Total_Cost = @Total_Cost,
Gross_Profit = @Total_Amount - @Total_Cost;

--获取结果
Select Period 销售时段,
Sale_Qty 销量,
Sale_Amount 实销,
Total_Amount 累计实销,
Total_Cost 成本,
Gross_Profit 毛利
From #temp_Sale_Gross_Profit;
DROUP TABLE temp_Sale_Gross_Profit;
END
GO

3、程序里调用该存储过程就行了
Exec up_Sale_Gross_Profit 日期参数;

热心网友 时间:2022-04-11 18:50

这个用查询语句是做不出来的
需要用游标

思路:
定义游标:查询你需要的字段及范围,记得按时间排序

返回一张临时表

变量,当前时段

逐行:
若该记录的时段与变量的当前时段相同,将临时表中的对应时段数据进行 行的累加(或平均数等操作)
若该记录的时段与变量的当前时段不同,在临时表中新增一个时段,将该数据一同新增进去

结束的话就你要的东西了追问那我如何将数据绑定到DataGridView中呢?

追答上述操作最终得到一个 临时表

然后用语句 select * from 临时表,便可形成一个DataTable / DataSet 就可以直接绑定到你grid上了

热心网友 时间:2022-04-11 20:41

用一句SQL语句完成似乎不太可能。
select '9-10' as 销售时段,sum(销量) as 销量,sum(实销) as实销,sum(累计实销) as 累计实销),sum(成本) as成本, sum( 毛利) as 毛利 from 销售表 where time>='9' and time<'10'
union
select '9-10' as 销售时段,sum(销量) as 销量,sum(实销) as实销,sum(累计实销) as 累计实销),sum(成本) as成本, sum( 毛利) as 毛利 from 销售表 where time>='10' and time<'11'
依次类推

热心网友 时间:2022-04-11 22:49

select datepart(hh,[销售时间]), as [销售时段],sum([销量]) as [销量],sum([实销]) as[实销],sum([累计实销]) as [累计实销],sum([成本]) as [成本],sum( [毛利])as [毛利]
from [销售表]
group by datepart(hh,[销售时间]),

热心网友 时间:2022-04-12 01:14

分组查询语句如下:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
统计查询语句如下:
select sum(column_name)
from table_name
where column_name operator value追问拜托,请看清上边的效果图OK?你这种分组查询是无法实现那种效果的,还有可能是我没说清楚,我要的统计是在查询结果最后一行显示成例如:“合计:1 2 25 36”对那一列的合计

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 SQL怎么实现时间间隔? SQL 拆分时间并分组 Oracle按半小时分组的sql 按时间段group by的 sql怎么写 SQL 怎样实现连续时间段中按小时&#47;分钟间隔查询数据?ACCESS 数据库 sql 时间 分组 查询 小白请教关于sqlserver数据库 sysobjects表的问题 Sqlserver 中如何根据时间(24小时) 模糊查询一个字段并统计该字段24小时 sqlserver按时间统计每天17:30到第二日17:30为一天的数据 mysql按时间分段统计的sql语句怎么写好 SQL 怎样实现连续时间段中按小时/分钟间隔查询数据?ACCESS 数据库 SQLServer中向数据库中增加数据文件 代码 在SQL server中怎么在同一个主文件组下建两个不同的数据文件?求格式,查询代码! 邮箱:lqt_devil@163.com 创建sql数据库代码 怎么用c#代码在sql中建立新的数据库? 数据库压缩备份是怎么回事 请问用叧个备份软件好,压缩备份SQLSERVER数据库? 为什么sqlserver数据库备份30g只有不到10g sqlserver2008 如何压缩备份数据库 安装SQL server时总报hotfix installer已停止工作怎么办??急!!! 按时间段分组sql sql 指定时间段内分组计算 查询条件使用datediff函数,这样写可以吗 如何用SQL查找3天的数据,一个月的,半年的数据 当天的为 DATEDIFF(day, HY_Adddate, GETDATE())=0 数据库的备份sqlserver VB的数据库备份代码怎么写? PIVOT 怎样才能跟 XML PATH 搭配使用实现行转列? 如何用Pivot实现行列转换 PIVOT 能跟 XML PATH 一起使用来进行行转列吗? unpivot只能和聚合函数用吗 请教如何用SQL语句把图片存入ACCESS数据库? 如何把桌面上的一个图片利用SQL语句将其存入数据库中 怎么用sql sever2008 将图片插入数据库,比如说要把D盘新建文件夹里的1.jpg 插入到数据库 怎样用sql语言向sql数据库中添加图片? 用SQL语句插入图片 用sql语句如何插入图片,如何把E盘的图片插入到ACCESS表中? SQL中怎样用语句获取一张图片的路径, 就是获取一张图片的路径 并添加到数据库 SQL server 用insert into 语句将图片插入到数据库表中 请问怎样用sql语句将图片插入到mysql数据库 怎么写sql语句将图片添加到access数据库里