重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

sqlserver收支表,Sqlserver建表语句

SQL语言的=ALL怎么用,WHERE子句中的。 是指集合包含的关系么?如果是谁包含谁

ALL不和=直接使用的, ANY才和=使用的,表示只要满足集合里面的一个条件就可以了

创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为南开企业提供专业的成都网站设计、做网站南开网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

ALL 一般是用於 ,=, ,=,常用来表示大于(小于)某个集合的所有元素。

譬如

SELECT sno

FROM tab

WHERE age =(55, 66, 77)是说年龄必须大于集合{55,66,77}的所有元素55 66 77

Clear now?

两个集合比较,可以用IN

SELECT *

FROM student

WHERE sno IN (Select sno from sc where cno = 'c001')

这个就是集合包含关系的一个最经典的例子。

子查询里面是选修了001课程的学生

sno in是凡是包含在 --〉选修了001课程的学生集合里面

没有达不到的,只有你想不到的

学生所选的课程集合要正好等于 课程集合

SELECT *

FROM SC

GROUP BY sno

HAVING COUNT(c_id) = (select count(*) from C)。 这样就达到目标了

SQL很灵活的,实际开发当中很少有人用ALL ANY的

怎么用SQL语句对表【收支表】进行分类汇总?

--建立测试表 并插入数据

-- 执行一个查询 ,你可以写在一个存储过程里面,我困了,不过格式按照你说的写好了

CREATE TABLE TB 

(说明 NVARCHAR(20)

,

类别 NVARCHAR(20),

金额 INT ,

款项类别 NVARCHAR(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

900, -- 金额 - int

N'费用B'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'收入', -- 类别 - nvarchar(20)

2000, -- 金额 - int

N'收入A'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目B', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

3500, -- 金额 - int

N'费用C'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目C', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

200, -- 金额 - int

N'费用D'  -- 款项类别 - nvarchar(20)

)

INSERT INTO dbo.TB

( 说明, 类别, 金额, 款项类别 )

VALUES  ( N'项目A', -- 说明 - nvarchar(20)

N'支出', -- 类别 - nvarchar(20)

300, -- 金额 - int

N'费用A'  -- 款项类别 - nvarchar(20)

)

CREATE TABLE #temp

(

说明 NVARCHAR(20) ,

类别 NVARCHAR(20) ,

金额 INT ,

款项类别 NVARCHAR(20)

)

INSERT  INTO #temp

SELECT  *

FROM    dbo.TB

UNION ALL

SELECT  说明 ,

CASE WHEN 说明 IS NOT  NULL THEN ISNULL(类别, '收支净值')

ELSE 类别

END + '合计' AS 类别 ,

SUM(CASE WHEN 类别 = '收入' THEN 金额

ELSE -金额

END) AS 金额 ,

MAX(款项类别) AS 款项类别

FROM    TB

WHERE   说明 IS NOT NULL

GROUP BY ROLLUP(说明, 类别)

ORDER BY 说明 

INSERT  #temp

SELECT  B.*

FROM    ( SELECT DISTINCT

说明 ,

'收入合计' AS 类别 ,

0 AS 金额 ,

'' AS 款项类别

FROM      #temp

WHERE     说明 IS NOT NULL

) B

WHERE   B.说明 + B.类别 NOT IN ( SELECT 说明 + 类别

FROM   #temp

WHERE  说明 IS NOT NULL )

INSERT  #temp

SELECT  B.*

FROM    ( SELECT DISTINCT

说明 ,

'支出合计' AS 类别 ,

0 AS 金额 ,

'' AS 款项类别

FROM      #temp

WHERE     说明 IS NOT NULL

) B

WHERE   B.说明 + B.类别 NOT IN ( SELECT 说明 + 类别

FROM   #temp

WHERE  说明 IS NOT NULL );

WITH    tt

AS ( SELECT   说明 ,

类别 ,

CASE WHEN 类别 = '支出合计' THEN ABS(金额)

ELSE 金额

END AS 金额 ,

CASE WHEN 类别 = '收入'

OR 类别 = '支出' THEN 款项类别

ELSE ''

END AS 款项类别 ,

CASE WHEN 类别 = '支出' THEN 1

WHEN 类别 = '收入' THEN 2

WHEN 类别 = '收入合计' THEN 3

WHEN 类别 = '支出合计' THEN 4

WHEN 类别 = '收支净值合计' THEN 5

ELSE 6

END AS num

FROM     #temp

WHERE    说明 IS NOT NULL

)

SELECT  tt.说明 ,

tt.类别 ,

tt.金额 ,

tt.款项类别

FROM    tt

ORDER BY 说明 ,

num   

DROP TABLE #temp

sql语句比较两个月的数据?

怎么改题目了?搞的我还把开始的要求给算出来了,如下:

select

a.月份,

a.本月收入总额,

case when b.本月收入总额=0 or b.本月收入总额 IS null then null else

(a.本月收入总额-b.本月收入总额)/b.本月收入总额*100 end 收入增长百分比,

a.本月支出总额,

case when b.本月支出总额=0 or b.本月支出总额 IS null then null else

(a.本月支出总额-b.本月支出总额)/b.本月支出总额*100 end 支出增长百分比,

a.本月余额,

case when b.本月余额=0 or b.本月余额 IS null then null else

(a.本月余额-b.本月余额)/b.本月余额*100 end 余额增长百分比

from

(

select

MONTH(日期) 月份,

isnull(SUM(收入金额),0) 本月收入总额,

isnull(SUM(支出金额),0) 本月支出总额,

isnull(SUM(收入金额),0)-isnull(SUM(支出金额),0) 本月余额

from 收支表

group by MONTH(日期)

) a

left join

(

select

MONTH(日期) 月份,

isnull(SUM(收入金额),0) 本月收入总额,

isnull(SUM(支出金额),0) 本月支出总额,

isnull(SUM(收入金额),0)-isnull(SUM(支出金额),0) 本月余额

from 收支表

group by MONTH(日期)

) b

on a.月份=b.月份+1

order by a.月份 desc

搞到最后才发现你是ACCESS数据库,晕死,那以上SQL Server 代码可能有些地方要修改

比如:case when then else end语句,不知ACCESS是否支持;

left join可能要改成left outer join;

isnull()函数,不知access是否支持;

month()函数,不知access是否支持;

用ACCESS完成这么复杂的运算,的确困难.

补充,用case主要是用来排除0和空值,比如,你6月份的收入为0,7月份的收入3500,那么收入增长百分比就是3500/0,结果是无穷大,你在ACCESS中怎么排除这种情况?


网页名称:sqlserver收支表,Sqlserver建表语句
分享URL:http://cqcxhl.com/article/hdpshp.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP