写报表常用基础知识点

 

1,简单多表查询

select *

from  表1 as 别名1,表2 as 别名1,表3 as 别名1,表4 as 别名1

  where  别名1.userid = 别名2.id

2,连接查询

select A.ID, A.NAME, A.AGE, B.GS,B.CLASS

  from 表1 as A left join 表2 as B on A .userid = B.id,

    表3 as C left join 表2 as D on C .gs .id = D.id

where   

GROUP BY A.ID

左连接 LEFT JOIN    右连接 RIGHT JOIN  内连接INNER JOIN

3,一个表分时间段,本日,本月,本年,查询对应数据

可使用case when

例如:case when year (时间字段) = year (getdate()) then 1 

when year (时间字段) = year (getdate() and  month(时间字段) =  month(getdate()) then 0

else 0 end

4, case when  可以给表格增加额外的行来辅助计算或者作为状态判定

例如:case when age<18  then '未成年'

    when  age>=18 and age<=28 then '青年'

    else '中年' end

5,union 和union all

  select a,b,c,d,e,f

  from A,B,C

  WHERE A.ID = B.USERID

UNION

  select g,h,i,j,k,l

  from D,E,F

  WHERE D.ID = E.USERID

 

UNION和UNION ALL 的作用都是把两个表的数据连接起来,放到一个表,

注意下一个表的数据是接在上一个表的对应列的下方,所以两个表的列要一一对应,

然后区别在于 UNION 会进行去重,UNION ALL 不会去重。

6,将一个表的查询结果作为另一个表的查询表(其实就是生成了个临时表,去查临时表)

例如;
select gs,sum(dnum)AS dnum,sum(mnum)AS mnum,SUM(ynum)AS ynum
from (
select  
        C.scode AS CODE
        ,GS.sname AS gs
        ,case when  year(C.qdsj) = year(GETDATE())and month(C.sj) = month(GETDATE())and day(C.sj) = day(GETDATE())  
            then 1 else 0 end as dnum
        ,case when  year(C.sj) = year(GETDATE())and month(C.sj) = month(GETDATE())
            then 1 else 0 end as mnum
        ,case when  year(cast(C.sj as datetime))=year(GETDATE()) then 1 else 0 end as yearnum
        from compact as C,gongsi as GS
                 where C.gsid = GS.id
                 and year(C.sj)=year(GETDATE())
                 )C GROUP BY gs

7,over 可用于开窗,例如

select * over()

from A,B

WHERE  A.ID = B.UAERID

 

8, cast万能格式转换器的用法、

标准格式 cast(a,xddate  as  datetime )或者 cast(a.title as varchar(50)) 

cast(目标字段 AS 目标数据类型(长度))

 

9,获取本日,本月,或者本年日期

方法一:
select  CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120) /** 本天  **/
select    CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)/** 本月  **/
select  CONVERT(varchar(10),DATEADD(MONTH,-MONTH( CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)),
方法二

    CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)),120) /** 本年 **/
    and YEAR(A.sj) = year(cast(GETDATE()as datetime))
    and month(A.sj)=month(CONVERT(datetime,DATEADD(DAY,-day(GETDATE()),GETDATE()),120))    
    select    month(CONVERT(datetime,DATEADD(DAY,-day(GETDATE()),GETDATE()),120))

方法三
and A.sj = cast( CONVERT(date,DATEADD(DAY,-0,GETDATE()),120) as datetime)
and A.sj >cast(CONVERT(date,DATEADD(DAY,-day(GETDATE())+1,GETDATE()),120)as datetime)
and YEAR(A.sj) = year(GETDATE())

 

10,CONVERT()的用法

示例用法:

CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)  //当前时间减去一天

CONVERT(varchar(10),DATEADD(month,-1,GETDATE()),120)  //当前时间减去一月

CONVERT(varchar(10),DATEADD(year,-1,GETDATE()),120)  //当前时间减去一年

11,创建索引

/*
                      //普通索引alter table table_name add index index_name (column_list) ;
                      //唯一索引alter table table_name add unique (column_list) ;
                      //主键索引alter table table_name add primary key (column_list) ;*/

12, 视图

create view A_view_AAAA  //创建

DROP VIEW  A_view_AAAA  //删除

 

13,待更新

 

posted @ 2020-11-17 19:26  晚来天欲雪a  阅读(154)  评论(0编辑  收藏  举报