查询一年每个月的数据和当月的数据

一年每个月的SQL:

SELECT
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '01', 1, 0 ) ) "01",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '02', 1, 0 ) ) "02",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '03', 1, 0 ) ) "03",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '04', 1, 0 ) ) "04",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '05', 1, 0 ) ) "05",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '06', 1, 0 ) ) "06",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '07', 1, 0 ) ) "07",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '08', 1, 0 ) ) "08",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '09', 1, 0 ) ) "09",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '10', 1, 0 ) ) "10",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '11', 1, 0 ) ) "11",
		SUM( DECODE( TO_CHAR( B.CJRQ, 'MM' ), '12', 1, 0 ) ) "12"
	FROM
		ZHBG_KYJFKZ_LXCGSQ B
	WHERE
		TO_CHAR( B.CJRQ, 'yyyy' ) = #{date}

当月的数的SQL:

SELECT
		TO_CHAR(A.FDATE, 'dd') "fdate", NVL(B.FNUM, 0) "fnum"
		FROM
		(
		SELECT
		FDATE
		FROM
		(SELECT TRUNC(SYSDATE, 'MONTH') + LEVEL - 1 AS FDATE FROM DUAL CONNECT BY LEVEL <![CDATA[<=]]> 31) T
		WHERE
		TO_CHAR(FDATE, 'MM') = TO_CHAR(SYSDATE, 'MM')
		) A
		LEFT JOIN(
		SELECT
		TO_CHAR(B.CJRQ, 'dd') AS FDATE,
		COUNT(1) AS FNUM
		FROM
		ZHBG_KYJFKZ_LXCGSQ B
		WHERE
		TO_CHAR(B.CJRQ, 'yyyy-MM') = TO_CHAR(SYSDATE, 'yyyy-MM')
		GROUP BY
		TO_CHAR(B.CJRQ, 'dd')
		) B ON TO_CHAR(A.FDATE, 'dd') = B.FDATE
		ORDER BY
		A.FDATE
如果你想从数据库或其他数据源中提取每年每的值,当年累计值以及累计值,通常涉及到对时间序列数据的分析。这通常在财务、销售或其他业务领域中常见,用于跟踪趋势和业绩。以下是查询的一般步骤: 1. **选择日期字段**:确保你有一个日期字段(如`date`或`report_date`),它可以标识记录的发生时间。 2. **按年份和份分组**:使用GROUP BY语句按年度(YYYY)和份(MM)对数据进行分组。 ```sql SELECT YEAR(date) AS 年份, MONTH(date) AS 份, SUM(值字段) AS 当月总值 FROM 数据表 GROUP BY 年份, 份; ``` 3. **当年累计值**:要在同一年内计算每个份的累计值,可以在上述查询的基础上再加一个窗口函数,比如`SUM() OVER (PARTITION BY 年份 ORDER BY 份)`。 ```sql SELECT 年份, 份, SUM(值字段) AS 当月总值, SUM(value_field) OVER (PARTITION BY 年份 ORDER BY 份) AS 当年累计值 FROM 数据表 GROUP BY 年份, 份; ``` 4. **累计值**:如果你想要的是整个时间段的累计值,比如从年初至今的累计,可以添加一个额外的累积条件,比如`RANK() OVER (PARTITION BY 年份 ORDER BY date)`,然后筛选出累计值为1的数据。 ```sql SELECT 年份, 份, SUM(值字段) AS 总累计值, SUM(value_field) OVER (PARTITION BY 年份 ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 累计值 FROM 数据表 WHERE RANK() = 1 GROUP BY 年份, 份; ``` 这里假设`RANK()`返回每个年份内的第一个份的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值