跟日期有關的兩條經典SQL語句

2021-06-06 13:05:54 字數 4379 閱讀 7541

1.用一條語句得出某日期所在月份的最大天數?

select day(dateadd(dd, -day('2004-02-13'), dateadd(mm, 1, '2004-02-13'))) as 'day number'

2.少記錄變成多條記錄問題

有表tbl

日期       收入    支出

2004-02-11 00:00:00 60 45

2004-03-01 00:00:00 60 45

2004-03-02 00:00:00 40 50

2004-03-05 00:00:00 50 40

/*測試資料:

create table tbl([日期] smalldatetime,[收入] int ,[支出] int) insert into tbl

select '2004-02-11', 60, 45

union select '2004-03-01',60, 45

union select '2004-03-02',40, 50

union select '2004-03-05',50, 40

*/要得到的結果:

日期       收入    支出     餘額

2004-02-01 00:00:00 null null null

2004-02-02 00:00:00 null null null

2004-02-03 00:00:00 null null null

2004-02-04 00:00:00 null null null

2004-02-05 00:00:00 null null null

2004-02-06 00:00:00 null null null

2004-02-07 00:00:00 null null null

2004-02-08 00:00:00 null null null

2004-02-09 00:00:00 null null null

2004-02-10 00:00:00 null null null

2004-02-11 00:00:00 60 45 15

2004-02-12 00:00:00 null null 15

2004-02-13 00:00:00 null null 15

2004-02-14 00:00:00 null null 15

2004-02-15 00:00:00 null null 15

2004-02-16 00:00:00 null null 15

2004-02-17 00:00:00 null null 15

2004-02-18 00:00:00 null null 15

2004-02-19 00:00:00 null null 15

2004-02-20 00:00:00 null null 15

2004-02-21 00:00:00 null null 15

2004-02-22 00:00:00 null null 15

2004-02-23 00:00:00 null null 15

2004-02-24 00:00:00 null null 15

2004-02-25 00:00:00 null null 15

2004-02-26 00:00:00 null null 15

2004-02-27 00:00:00 null null 15

2004-02-28 00:00:00 null null 15

2004-02-29 00:00:00 null null 15

2004-03-01 00:00:00 60 45 30

2004-03-02 00:00:00 40 50 20

2004-03-03 00:00:00 null null 20

2004-03-04 00:00:00 null null 20

2004-03-05 00:00:00 50 40 30

2004-03-06 00:00:00 null null 30

2004-03-07 00:00:00 null null 30

2004-03-08 00:00:00 null null 30

2004-03-09 00:00:00 null null 30

2004-03-10 00:00:00 null null 30

2004-03-11 00:00:00 null null 30

2004-03-12 00:00:00 null null 30

2004-03-13 00:00:00 null null 30

2004-03-14 00:00:00 null null 30

2004-03-15 00:00:00 null null 30

2004-03-16 00:00:00 null null 30

2004-03-17 00:00:00 null null 30

2004-03-18 00:00:00 null null 30

2004-03-19 00:00:00 null null 30

2004-03-20 00:00:00 null null 30

2004-03-21 00:00:00 null null 30

2004-03-22 00:00:00 null null 30

2004-03-23 00:00:00 null null 30

2004-03-24 00:00:00 null null 30

2004-03-25 00:00:00 null null 30

2004-03-26 00:00:00 null null 30

2004-03-27 00:00:00 null null 30

2004-03-28 00:00:00 null null 30

2004-03-29 00:00:00 null null 30

2004-03-30 00:00:00 null null 30

2004-03-31 00:00:00 null null 30

答案:select y.[日期], tbl.[收入], tbl.[支出], (

select sum(isnull(tbl.[收入], 0)-isnull(tbl.[支出], 0)) from tbl where [日期]<=y.[日期]) as [餘額]

from tbl right join (

select dateadd(dd, n.i, dateadd(dd, 1-day(m.minday), m.minday)) as [日期]

from (

select 0 as i

union all select 1

union all select 2

union all select 3

union all select 4

union all select 5

union all select 6

union all select 7

union all select 8

union all select 9

union all select 10

union all select 11

union all select 12

union all select 13

union all select 14

union all select 15

union all select 16

union all select 17

union all select 18

union all select 19

union all select 20

union all select 21

union all select 22

union all select 23

union all select 24

union all select 25

union all select 26

union all select 27

union all select 28

union all select 29

union all select 30

union all select 31

) n,

(select min(日期) as minday

from tbl

group by datediff(month, 0, 日期)

) m

where datediff(mm, dateadd(dd, n.i, dateadd(dd, 1-day(m.minday), m.minday)), m.minday)=0) as y

on tbl.[日期]=y.日期

跟日期有關的兩條經典SQL語句

1.用一條 語句得出某日期所在月份的最大天數?select day dateadd dd,day 2004 02 13 dateadd mm,1,2004 02 13 as day number 2.少記錄變成多條記錄問題 有表tbl 日期 收入 支出 2004 02 11 00 00 00 60 ...

跟日期有關的兩條經典SQL語句

1.用一條語句得出某日期所在月份的最大天數?select day dateadd dd,day 2004 02 13 dateadd mm,1,2004 02 13 as day number 2.少記錄變成多條記錄問題 有表tbl 日期 收入 支出 2004 02 11 00 00 00 60 4...

兩條乙個的sql

public string isalarm string userid throws userexception return result public string maprow resultset rs,int num throws sqlexception return result use...