读书人

求sql语句 多谢

发布时间: 2012-01-20 18:53:53 作者: rapoo

求sql语句 谢谢
month_id day_time extend_CHJ extend_HSDY extend_SBQX
1 2011-09-15 00:00:00.000 435.00 435.00 345.00
2 2011-09-16 00:00:00.000 2343.00 45.00 334.33

上面是表结构。
根据月份时间查询,想要结果
1 2011-09-1 00:00:00.000 NUll NUll NUll
2 2011-09-2 00:00:00.000 NUll NUll NUll
3 2011-09-3 00:00:00.000 NUll NUll NUll
4 2011-09-4 00:00:00.000 NUll NUll NUll
5 2011-09-5 00:00:00.000 NUll NUll NUll
6 2011-09-6 00:00:00.000 NUll NUll NUll
.........
15 2011-09-15 00:00:00.000 435.00 435.00 345.00
16 2011-09-16 00:00:00.000 2343.00 45.00 334.33
.........
29 2011-09-29 00:00:00.000 NUll NUll NUll
30 2011-09-30 00:00:00.000 NUll NUll NUll





[解决办法]

SQL code
生成一个日期表,然后使用左连接select m.* , n.extend_CHJ ,n.extend_HSDY ,n.extend_SBQX from(select 1 monthid , '2011-09-1' day_time union allselect 2 monthid , '2011-09-2' day_time union all...select 30 monthid , '2011-09-30' day_time) m left jointb non m.day_time = n.day_time
[解决办法]
SQL code
create table tb(month_id int,day_time datetime,extend_CHJ decimal(18,2),extend_HSDY decimal(18,2),extend_SBQX decimal(18,2))insert into tb values(1 ,'2011-09-15 00:00:00.000', 435.00  ,435.00 ,345.00)insert into tb values(2 ,'2011-09-16 00:00:00.000', 2343.00 ,45.00  ,334.33)go--生成一个日期表,然后使用左连接select m.* , n.extend_CHJ ,n.extend_HSDY ,n.extend_SBQX from(select 1 monthid  , '2011-09-01' day_time union allselect 2 monthid  , '2011-09-02' day_time union allselect 3 monthid  , '2011-09-03' day_time union allselect 4 monthid  , '2011-09-04' day_time union allselect 5 monthid  , '2011-09-05' day_time union allselect 6 monthid  , '2011-09-06' day_time union allselect 7 monthid  , '2011-09-07' day_time union allselect 8 monthid  , '2011-09-08' day_time union allselect 9 monthid  , '2011-09-09' day_time union allselect 10 monthid , '2011-09-10' day_time union allselect 11 monthid , '2011-09-11' day_time union allselect 12 monthid , '2011-09-12' day_time union allselect 13 monthid , '2011-09-13' day_time union allselect 14 monthid , '2011-09-14' day_time union allselect 15 monthid , '2011-09-15' day_time union allselect 16 monthid , '2011-09-16' day_time union allselect 17 monthid , '2011-09-17' day_time union allselect 18 monthid , '2011-09-18' day_time union allselect 19 monthid , '2011-09-19' day_time union allselect 20 monthid , '2011-09-20' day_time union allselect 21 monthid , '2011-09-21' day_time union allselect 22 monthid , '2011-09-22' day_time union allselect 23 monthid , '2011-09-23' day_time union allselect 24 monthid , '2011-09-24' day_time union allselect 25 monthid , '2011-09-25' day_time union allselect 26 monthid , '2011-09-26' day_time union allselect 27 monthid , '2011-09-27' day_time union allselect 28 monthid , '2011-09-28' day_time union allselect 29 monthid , '2011-09-29' day_time union allselect 30 monthid , '2011-09-30' day_time) m left jointb non m.day_time = n.day_timedrop table tb/*monthid     day_time   extend_CHJ           extend_HSDY          extend_SBQX          ----------- ---------- -------------------- -------------------- -------------------- 1           2011-09-01 NULL                 NULL                 NULL2           2011-09-02 NULL                 NULL                 NULL3           2011-09-03 NULL                 NULL                 NULL4           2011-09-04 NULL                 NULL                 NULL5           2011-09-05 NULL                 NULL                 NULL6           2011-09-06 NULL                 NULL                 NULL7           2011-09-07 NULL                 NULL                 NULL8           2011-09-08 NULL                 NULL                 NULL9           2011-09-09 NULL                 NULL                 NULL10          2011-09-10 NULL                 NULL                 NULL11          2011-09-11 NULL                 NULL                 NULL12          2011-09-12 NULL                 NULL                 NULL13          2011-09-13 NULL                 NULL                 NULL14          2011-09-14 NULL                 NULL                 NULL15          2011-09-15 435.00               435.00               345.0016          2011-09-16 2343.00              45.00                334.3317          2011-09-17 NULL                 NULL                 NULL18          2011-09-18 NULL                 NULL                 NULL19          2011-09-19 NULL                 NULL                 NULL20          2011-09-20 NULL                 NULL                 NULL21          2011-09-21 NULL                 NULL                 NULL22          2011-09-22 NULL                 NULL                 NULL23          2011-09-23 NULL                 NULL                 NULL24          2011-09-24 NULL                 NULL                 NULL25          2011-09-25 NULL                 NULL                 NULL26          2011-09-26 NULL                 NULL                 NULL27          2011-09-27 NULL                 NULL                 NULL28          2011-09-28 NULL                 NULL                 NULL29          2011-09-29 NULL                 NULL                 NULL30          2011-09-30 NULL                 NULL                 NULL(所影响的行数为 30 行)*/ 


[解决办法]

SQL code
create table tb(month_id int,day_time datetime,extend_CHJ decimal(18,2),extend_HSDY decimal(18,2),extend_SBQX decimal(18,2))insert into tb values(1 ,'2011-09-15 00:00:00.000', 435.00  ,435.00 ,345.00)insert into tb values(2 ,'2011-09-16 00:00:00.000', 2343.00 ,45.00  ,334.33)go--也可以使用系统表来完成select m.number id , cast('2011-09-01' as datetime) + m.number - 1 day_time, n.extend_CHJ ,n.extend_HSDY ,n.extend_SBQX from master..spt_values m left join tb non cast('2011-09-01' as datetime) + m.number - 1 = n.day_timewhere m.type='p' and m.number between 1 and 30drop table tb/*monthid     day_time   extend_CHJ           extend_HSDY          extend_SBQX          ----------- ---------- -------------------- -------------------- -------------------- 1           2011-09-01 NULL                 NULL                 NULL2           2011-09-02 NULL                 NULL                 NULL3           2011-09-03 NULL                 NULL                 NULL4           2011-09-04 NULL                 NULL                 NULL5           2011-09-05 NULL                 NULL                 NULL6           2011-09-06 NULL                 NULL                 NULL7           2011-09-07 NULL                 NULL                 NULL8           2011-09-08 NULL                 NULL                 NULL9           2011-09-09 NULL                 NULL                 NULL10          2011-09-10 NULL                 NULL                 NULL11          2011-09-11 NULL                 NULL                 NULL12          2011-09-12 NULL                 NULL                 NULL13          2011-09-13 NULL                 NULL                 NULL14          2011-09-14 NULL                 NULL                 NULL15          2011-09-15 435.00               435.00               345.0016          2011-09-16 2343.00              45.00                334.3317          2011-09-17 NULL                 NULL                 NULL18          2011-09-18 NULL                 NULL                 NULL19          2011-09-19 NULL                 NULL                 NULL20          2011-09-20 NULL                 NULL                 NULL21          2011-09-21 NULL                 NULL                 NULL22          2011-09-22 NULL                 NULL                 NULL23          2011-09-23 NULL                 NULL                 NULL24          2011-09-24 NULL                 NULL                 NULL25          2011-09-25 NULL                 NULL                 NULL26          2011-09-26 NULL                 NULL                 NULL27          2011-09-27 NULL                 NULL                 NULL28          2011-09-28 NULL                 NULL                 NULL29          2011-09-29 NULL                 NULL                 NULL30          2011-09-30 NULL                 NULL                 NULL(所影响的行数为 30 行)*/
[解决办法]
SQL code
------------------------------ Author  :fredrickhu(小F,向高手学习)-- Date    :2011-11-01 16:28:01-- Version:--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) --    Apr 22 2011 11:57:00 --    Copyright (c) Microsoft Corporation--    Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)--------------------------------> 测试数据:[tb]if object_id('[tb]') is not null drop table [tb]go create table [tb]([month_id] int,[day_time] datetime,[extend_CHJ] numeric(6,2),[extend_HSDY] numeric(5,2),[extend_SBQX] numeric(5,2))insert [tb]select 1,'2011-09-15 00:00:00.000',435.00,435.00,345.00 union allselect 2,'2011-09-16 00:00:00.000',2343.00,45.00,334.33--------------开始查询--------------------------declare @startdate datetime,@enddate datetimeset @startdate='2011-09-01'set @enddate='2011-09-30'; with f as(select convert(varchar(10),dateadd(day,number,@startdate),120) as day_timefrom    master..spt_values where     datediff(day,dateadd(day,number,@startdate), @enddate)>=0    and number>=0     and type='p')select    month_id=row_number()over(order by getdate()),a.day_time,b.extend_CHJ,b.extend_HSDY,b.extend_SBQXfrom   f a left join   tb b on   datediff(dd,a.day_time,b.day_time)=0----------------结果----------------------------/* (2 行受影响)month_id             day_time   extend_CHJ                              extend_HSDY                             extend_SBQX-------------------- ---------- --------------------------------------- --------------------------------------- ---------------------------------------1                    2011-09-01 NULL                                    NULL                                    NULL2                    2011-09-02 NULL                                    NULL                                    NULL3                    2011-09-03 NULL                                    NULL                                    NULL4                    2011-09-04 NULL                                    NULL                                    NULL5                    2011-09-05 NULL                                    NULL                                    NULL6                    2011-09-06 NULL                                    NULL                                    NULL7                    2011-09-07 NULL                                    NULL                                    NULL8                    2011-09-08 NULL                                    NULL                                    NULL9                    2011-09-09 NULL                                    NULL                                    NULL10                   2011-09-10 NULL                                    NULL                                    NULL11                   2011-09-11 NULL                                    NULL                                    NULL12                   2011-09-12 NULL                                    NULL                                    NULL13                   2011-09-13 NULL                                    NULL                                    NULL14                   2011-09-14 NULL                                    NULL                                    NULL15                   2011-09-15 435.00                                  435.00                                  345.0016                   2011-09-16 2343.00                                 45.00                                   334.3317                   2011-09-17 NULL                                    NULL                                    NULL18                   2011-09-18 NULL                                    NULL                                    NULL19                   2011-09-19 NULL                                    NULL                                    NULL20                   2011-09-20 NULL                                    NULL                                    NULL21                   2011-09-21 NULL                                    NULL                                    NULL22                   2011-09-22 NULL                                    NULL                                    NULL23                   2011-09-23 NULL                                    NULL                                    NULL24                   2011-09-24 NULL                                    NULL                                    NULL25                   2011-09-25 NULL                                    NULL                                    NULL26                   2011-09-26 NULL                                    NULL                                    NULL27                   2011-09-27 NULL                                    NULL                                    NULL28                   2011-09-28 NULL                                    NULL                                    NULL29                   2011-09-29 NULL                                    NULL                                    NULL30                   2011-09-30 NULL                                    NULL                                    NULL(30 行受影响)*/ 


[解决办法]

SQL code
SELECT            B.new_date       ,extend_CHJ       ,extend_HSDY      , xtend_SBQX          FROM TB A  right join     (select  cast( '2011-09-01' as datetime) +number  as new_date from master..spt_values where type='P' )  Bon A.month_id =B.new_date 

读书人网 >SQL Server

热点推荐