INQTY OUTQTY ITEMID TRANSDATE enddate
1.34000 1.250000000000 18K 2009-11-04 2009-11-04
1.04000 1.050000000000 18K 2009-11-05 2009-11-05
1.14000 1.130000000000 18K 2009-12-04 2009-12-04
1.14000 1.130000000000 18K 2009-12-05 2009-12-05
5.10000 5.080000000000 18K 2010-01-04 2010-01-04
6.02000 5.620000000000 18K 2010-02-05 2010-02-05
5.16000 5.160000000000 18K 2010-03-01 2010-01-01
5.16000 5.160000000000 18K 2010-03-02 2010-01-02
5.16000 5.160000000000 18K 2010-03-03 2010-03-03
... ... ... ... ....
5.16000 5.160000000000 18K 2010-03-18 2010-03-18要得出效果是:transdate 小于当年(2010)年当月(03)之前的 都进行月统计inqty,同样enddate小于当年2010当月(03)之前进行月份统计outqty,当年当月的就不用统计效果图:
INQTY OUTQTY 2009-11 2.38 2.30
2009-12 2.28 2.26
... ... ...
2010-2 6.02 5.62
2010-3-1 5.16 5.16
.... ... ...
2010-3-18 5.16 5.16
1.34000 1.250000000000 18K 2009-11-04 2009-11-04
1.04000 1.050000000000 18K 2009-11-05 2009-11-05
1.14000 1.130000000000 18K 2009-12-04 2009-12-04
1.14000 1.130000000000 18K 2009-12-05 2009-12-05
5.10000 5.080000000000 18K 2010-01-04 2010-01-04
6.02000 5.620000000000 18K 2010-02-05 2010-02-05
5.16000 5.160000000000 18K 2010-03-01 2010-01-01
5.16000 5.160000000000 18K 2010-03-02 2010-01-02
5.16000 5.160000000000 18K 2010-03-03 2010-03-03
... ... ... ... ....
5.16000 5.160000000000 18K 2010-03-18 2010-03-18要得出效果是:transdate 小于当年(2010)年当月(03)之前的 都进行月统计inqty,同样enddate小于当年2010当月(03)之前进行月份统计outqty,当年当月的就不用统计效果图:
INQTY OUTQTY 2009-11 2.38 2.30
2009-12 2.28 2.26
... ... ...
2010-2 6.02 5.62
2010-3-1 5.16 5.16
.... ... ...
2010-3-18 5.16 5.16
解决方案 »
- [虎年散分贴]请教有经验的高手,菜单权限表应该怎么设计
- 找出某一字段不为空的记录的语句怎么写?
- 关于mssql的几个问题,谢谢各位!
- 关系数据库、非关系数据库与分布式文件系统的协作应用
- 急: SQL SERVER端想在记录更新前保存记录的原字段值(如商品条码),是不是要采用 INSTERD OF UPDATE 触发器,
- SQL Server 2005 导入Excel文件中的数据,其中Excel一列(同时含数值型和文本型数据)对应数据库表的一个字段(nvarchar(255)),只能导入数值型数据?
- 我用OpenDataSource查到的列的順序怎麼和Excel中的順序不一樣
- 各位老大,帮帮忙吧,我这几天一直被“致命错误”搞的头昏脑胀!
- 请问itjune(小鱼儿) ,关于SQLSERVER数据复制的问题
- SQL where条件case when then
- 无法打开数据库
- 为何重启服务器后,执行一条简单的SQL语句会有如下提示:在向服务器发送请求时发生传输级错误
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-03-18 13:50:42
-- Verstion:
-- Microsoft SQL Server 2000 - 8.00.2055 (Intel X86)
-- Dec 16 2008 19:46:53
-- Copyright (c) 1988-2003 Microsoft Corporation
-- Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([INQTY] numeric(6,5),[OUTQTY] numeric(13,12),[ITEMID] varchar(3),[TRANSDATE] datetime,[enddate] datetime)
insert [tb]
select 1.34000,1.250000000000,'18K','2009-11-04','2009-11-04' union all
select 1.04000,1.050000000000,'18K','2009-11-05','2009-11-05' union all
select 1.14000,1.130000000000,'18K','2009-12-04','2009-12-04' union all
select 1.14000,1.130000000000,'18K','2009-12-05','2009-12-05' union all
select 5.10000,5.080000000000,'18K','2010-01-04','2010-01-04' union all
select 6.02000,5.620000000000,'18K','2010-02-05','2010-02-05' union all
select 5.16000,5.160000000000,'18K','2010-03-01','2010-01-01' union all
select 5.16000,5.160000000000,'18K','2010-03-02','2010-01-02' union all
select 5.16000,5.160000000000,'18K','2010-03-03','2010-03-03' union all
select 5.16000,5.160000000000,'18K','2010-03-18','2010-03-18'
--------------开始查询--------------------------
select
convert(varchar(10),TRANSDATE,120),convert(varchar(10),enddate,120),
sum(case when datediff(mm,transdate,getdate())>0 then inqty else 0 end) as inqty,
sum(case when datediff(mm,enddate,getdate())>0 then outqty else 0 end) as outqty
from
[tb]
group by
convert(varchar(10),TRANSDATE,120),convert(varchar(10),enddate,120)
----------------结果----------------------------
/* inqty outqty
---------- ---------- ---------------------------------------- ----------------------------------------
2009-11-04 2009-11-04 1.34000 1.250000000000
2009-11-05 2009-11-05 1.04000 1.050000000000
2009-12-04 2009-12-04 1.14000 1.130000000000
2009-12-05 2009-12-05 1.14000 1.130000000000
2010-03-01 2010-01-01 .00000 5.160000000000
2010-03-02 2010-01-02 .00000 5.160000000000
2010-01-04 2010-01-04 5.10000 5.080000000000
2010-02-05 2010-02-05 6.02000 5.620000000000
2010-03-03 2010-03-03 .00000 .000000000000
2010-03-18 2010-03-18 .00000 .000000000000(所影响的行数为 10 行)
*/
FROM
(
SELECT
CONVERT(VARCHAR(7),TRANSDATE ,120)AS TIME,
SUM(inqty)inqty
FROM TB
WHERE CONVERT(VARCHAR(7),TRANSDATE ,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),TRANSDATE ,120)
)A
,(
SELECT
CONVERT(VARCHAR(7),enddate,120)AS TIME,
SUM(OUTQTY )OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),enddate,120))B WHERE A.TIME=B.TIMEUNION ALLSELECT CONVERT(VARCHAR(7),enddate,120) TIME ,inqty ,OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)>=CONVERT(VARCHAR(7),GETDATE(),120)
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([INQTY] numeric(6,5),[OUTQTY] numeric(13,12),[ITEMID] varchar(3),[TRANSDATE] datetime,[enddate] datetime)
insert [tb]
select 1.34000,1.250000000000,'18K','2009-11-04','2009-11-04' union all
select 1.04000,1.050000000000,'18K','2009-11-05','2009-11-05' union all
select 1.14000,1.130000000000,'18K','2009-12-04','2009-12-04' union all
select 1.14000,1.130000000000,'18K','2009-12-05','2009-12-05' union all
select 5.10000,5.080000000000,'18K','2010-01-04','2010-01-04' union all
select 6.02000,5.620000000000,'18K','2010-02-05','2010-02-05' union all
select 5.16000,5.160000000000,'18K','2010-03-01','2010-01-01' union all
select 5.16000,5.160000000000,'18K','2010-03-02','2010-01-02' union all
select 5.16000,5.160000000000,'18K','2010-03-03','2010-03-03' union all
select 5.16000,5.160000000000,'18K','2010-03-18','2010-03-18'SELECT A.TIME,inqty ,OUTQTY
FROM
(
SELECT
CONVERT(VARCHAR(7),TRANSDATE ,120)AS TIME,
SUM(inqty)inqty
FROM TB
WHERE CONVERT(VARCHAR(7),TRANSDATE ,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),TRANSDATE ,120)
)A
,(
SELECT
CONVERT(VARCHAR(7),enddate,120)AS TIME,
SUM(OUTQTY )OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),enddate,120))B WHERE A.TIME=B.TIMEUNION ALLSELECT CONVERT(VARCHAR(7),enddate,120) TIME ,inqty ,OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)>=CONVERT(VARCHAR(7),GETDATE(),120)
(所影响的行数为 10 行)TIME inqty OUTQTY
------- ---------------------------------------- ----------------------------------------
2009-11 2.38000 2.300000000000
2009-12 2.28000 2.260000000000
2010-01 5.10000 15.400000000000
2010-02 6.02000 5.620000000000
2010-03 5.16000 5.160000000000
2010-03 5.16000 5.160000000000(所影响的行数为 6 行)
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([INQTY] numeric(6,5),[OUTQTY] numeric(13,12),[ITEMID] varchar(3),[TRANSDATE] datetime,[enddate] datetime)
insert [tb]
select 1.34000,1.250000000000,'18K','2009-11-04','2009-11-04' union all
select 1.04000,1.050000000000,'18K','2009-11-05','2009-11-05' union all
select 1.14000,1.130000000000,'18K','2009-12-04','2009-12-04' union all
select 1.14000,1.130000000000,'18K','2009-12-05','2009-12-05' union all
select 5.10000,5.080000000000,'18K','2010-01-04','2010-01-04' union all
select 6.02000,5.620000000000,'18K','2010-02-05','2010-02-05' union all
select 5.16000,5.160000000000,'18K','2010-03-01','2010-01-01' union all
select 5.16000,5.160000000000,'18K','2010-03-02','2010-01-02' union all
select 5.16000,5.160000000000,'18K','2010-03-03','2010-03-03' union all
select 5.16000,5.160000000000,'18K','2010-03-18','2010-03-18'SELECT A.TIME,inqty ,OUTQTY
FROM
(
SELECT
CONVERT(VARCHAR(7),TRANSDATE ,120)AS TIME,
SUM(inqty)inqty
FROM TB
WHERE CONVERT(VARCHAR(7),TRANSDATE ,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),TRANSDATE ,120)
)A
,(
SELECT
CONVERT(VARCHAR(7),enddate,120)AS TIME,
SUM(OUTQTY )OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),enddate,120))B WHERE A.TIME=B.TIMEUNION ALLSELECT CONVERT(VARCHAR(10),enddate,120) TIME ,inqty ,OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)>=CONVERT(VARCHAR(7),GETDATE(),120)
(所影响的行数为 10 行)TIME inqty OUTQTY
---------- ---------------------------------------- ----------------------------------------
2009-11 2.38000 2.300000000000
2009-12 2.28000 2.260000000000
2010-01 5.10000 15.400000000000
2010-02 6.02000 5.620000000000
2010-03-03 5.16000 5.160000000000
2010-03-18 5.16000 5.160000000000(所影响的行数为 6 行)
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([INQTY] numeric(6,5),[OUTQTY] numeric(13,12),[ITEMID] varchar(3),[TRANSDATE] datetime,[enddate] datetime)
insert [tb]
select 1.34000,1.250000000000,'18K','2009-11-04','2009-11-04' union all
select 1.04000,1.050000000000,'18K','2009-11-05','2009-11-05' union all
select 1.14000,1.130000000000,'18K','2009-12-04','2009-12-04' union all
select 1.14000,1.130000000000,'18K','2009-12-05','2009-12-05' union all
select 5.10000,5.080000000000,'18K','2010-01-04','2010-01-04' union all
select 6.02000,5.620000000000,'18K','2010-02-05','2010-02-05' union all
select 5.16000,5.160000000000,'18K','2010-03-01','2010-01-01' union all
select 5.16000,5.160000000000,'18K','2010-03-02','2010-01-02' union all
select 5.16000,5.160000000000,'18K','2010-03-03','2010-03-03' union all
select 5.16000,5.160000000000,'18K','2010-03-18','2010-03-18'SELECT A.TIME,inqty ,OUTQTY
FROM
(
SELECT
CONVERT(VARCHAR(7),TRANSDATE ,120)AS TIME,
SUM(inqty)inqty
FROM TB
WHERE CONVERT(VARCHAR(7),TRANSDATE ,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),TRANSDATE ,120)
)A
,(
SELECT
CONVERT(VARCHAR(7),enddate,120)AS TIME,
SUM(OUTQTY )OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)<CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY CONVERT(VARCHAR(7),enddate,120))B WHERE A.TIME=B.TIMEUNION ALL
SELECT CONVERT(VARCHAR(10),TRANSDATE,120) TIME ,inqty ,OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),TRANSDATE,120)>=CONVERT(VARCHAR(7),GETDATE(),120)
UNION ALL
SELECT CONVERT(VARCHAR(10),enddate,120) TIME ,inqty ,OUTQTY
FROM TB
WHERE CONVERT(VARCHAR(7),enddate,120)>=CONVERT(VARCHAR(7),GETDATE(),120)
(所影响的行数为 10 行)TIME inqty OUTQTY
---------- ---------------------------------------- ----------------------------------------
2009-11 2.38000 2.300000000000
2009-12 2.28000 2.260000000000
2010-01 5.10000 15.400000000000
2010-02 6.02000 5.620000000000
2010-03-01 5.16000 5.160000000000
2010-03-02 5.16000 5.160000000000
2010-03-03 5.16000 5.160000000000
2010-03-18 5.16000 5.160000000000
2010-03-03 5.16000 5.160000000000
2010-03-18 5.16000 5.160000000000(所影响的行数为 10 行)