首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • sql显示一个月内的数据,没有数据的行置空 [已结贴,结贴人:luyesql]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • luyesql
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-21 14:18:47 楼主
      日期            工作内容    发布人
    2008-8-11        content1   
    2008-8-12        content2


    假设数据库只有这两条记录
    但我想显示一个月的数据,没有数据的置为空即
      日期            工作内容    发布人
    2008-8-1
    2008-8-2
    2008-8-3
    2008-8-4
    2008-8-5
    2008-8-6
    2008-8-7
    2008-8-8
    2008-8-9
    2008-8-10
    2008-8-11        content1
    2008-8-12        content1
    2008-8-13
    2008-8-14
    2008-8-14
    2008-8-18     
    2008-8-19   
    .....
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • luyesql
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 14:21:561楼 得分:0
    还有就是如果2008-8-1有多条记录的话,那么只显示一个2008-8-1

      日期            工作内容    发布人

    2008-8-1        content1
                    content2
    而不是
      日期            工作内容    发布人

    2008-8-1        content1
    2008-8-1        content2

    这该如何写呢

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • roy_88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      4

    发表于:2008-08-21 14:24:182楼 得分:15
    SQL code
    用輔助表: declare @T table([日期] Datetime,[工作内容] nvarchar(8),[发布人] nvarchar(50)) Insert @T select '2008-8-11',N'content1','' union all select '2008-8-12',N'content2','' ;with Date as (select cast('2008-08-01' as datetime) Date union all select Date+1 from Date where Date+1<'2008-9-1') select a.Date, [工作内容]=isnull([工作内容],''),[发布人]=isnull([发布人],'') from Date a left join @T b on a.Date=b.[日期] (2 個資料列受到影響) Date 工作内容 发布人 ----------------------- -------- -------------------------------------------------- 2008-08-01 00:00:00.000 2008-08-02 00:00:00.000 2008-08-03 00:00:00.000 2008-08-04 00:00:00.000 2008-08-05 00:00:00.000 2008-08-06 00:00:00.000 2008-08-07 00:00:00.000 2008-08-08 00:00:00.000 2008-08-09 00:00:00.000 2008-08-10 00:00:00.000 2008-08-11 00:00:00.000 content1 2008-08-12 00:00:00.000 content2 2008-08-13 00:00:00.000 2008-08-14 00:00:00.000 2008-08-15 00:00:00.000 2008-08-16 00:00:00.000 2008-08-17 00:00:00.000 2008-08-18 00:00:00.000 2008-08-19 00:00:00.000 2008-08-20 00:00:00.000 2008-08-21 00:00:00.000 2008-08-22 00:00:00.000 2008-08-23 00:00:00.000 2008-08-24 00:00:00.000 2008-08-25 00:00:00.000 2008-08-26 00:00:00.000 2008-08-27 00:00:00.000 2008-08-28 00:00:00.000 2008-08-29 00:00:00.000 2008-08-30 00:00:00.000 2008-08-31 00:00:00.000 (31 個資料列受到影響)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • roy_88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      4

    发表于:2008-08-21 14:27:363楼 得分:0
    declare @T table([日期] Datetime,[工作内容] nvarchar(8),[发布人] nvarchar(50))
    Insert @T
    select '2008-8-11',N'content1','' union all
    select '2008-8-12',N'content2',''

    ;with Date
    as
    (select cast('2008-08-01' as datetime) Date
    union all
    select Date+1 from Date where Date+1 <'2008-9-1')
    select
    [日期]=convert(varchar(10),a.Date,120),
    [工作内容]=isnull([工作内容],''),
    [发布人]=isnull([发布人],'')
    from
    Date a
    left join
    @T b on a.Date=b.[日期]

    (2 個資料列受到影響)
    日期        工作内容    发布人
    ---------- -------- --------------------------------------------------
    2008-08-01         
    2008-08-02         
    2008-08-03         
    2008-08-04         
    2008-08-05         
    2008-08-06         
    2008-08-07         
    2008-08-08         
    2008-08-09         
    2008-08-10         
    2008-08-11 content1
    2008-08-12 content2
    2008-08-13         
    2008-08-14         
    2008-08-15         
    2008-08-16         
    2008-08-17         
    2008-08-18         
    2008-08-19         
    2008-08-20         
    2008-08-21         
    2008-08-22         
    2008-08-23         
    2008-08-24         
    2008-08-25         
    2008-08-26         
    2008-08-27         
    2008-08-28         
    2008-08-29         
    2008-08-30         
    2008-08-31         

    (31 個資料列受到影響)

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • roy_88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      4

    发表于:2008-08-21 14:30:094楼 得分:0
    SQL code
    顯示? declare @T table([日期] varchar(10),[工作内容] nvarchar(8),[发布人] nvarchar(50)) Insert @T select '2008-8-01',N'content1','' union all select '2008-8-01',N'content2','' select [日期]=case when [工作内容]=(select top 1 [工作内容] from @T where [日期]=t.[日期]) then [日期] else '' end, [工作内容], [发布人] from @T T (2 個資料列受到影響) 日期 工作内容 发布人 ---------- -------- -------------------------------------------------- 2008-8-01 content1 content2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wufeng4552
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 14:32:525楼 得分:5
    declare @d table(日期 datetime)
    declare @date datetime
    set @date='2008-08-01'
    while @date <'2008-08-31'
        begin
          insert @d select @date
          set @date=dateadd(dd,1,@date)
        end
    declare @t table(日期 datetime,工作内容 varchar(20))   
    insert @t select '2008-8-11','content1'   
    insert @t select '2008-8-12','content2'
    select d.日期,isnull(t.工作内容,'') from @d d left join @t t on d.日期=t.日期

    日期                     
    ----------------------- --------------------
    2008-08-01 00:00:00.000
    2008-08-02 00:00:00.000
    2008-08-03 00:00:00.000
    2008-08-04 00:00:00.000
    2008-08-05 00:00:00.000
    2008-08-06 00:00:00.000
    2008-08-07 00:00:00.000
    2008-08-08 00:00:00.000
    2008-08-09 00:00:00.000
    2008-08-10 00:00:00.000
    2008-08-11 00:00:00.000 content1
    2008-08-12 00:00:00.000 content2
    2008-08-13 00:00:00.000
    2008-08-14 00:00:00.000
    2008-08-15 00:00:00.000
    2008-08-16 00:00:00.000
    2008-08-17 00:00:00.000
    2008-08-18 00:00:00.000
    2008-08-19 00:00:00.000
    2008-08-20 00:00:00.000
    2008-08-21 00:00:00.000
    2008-08-22 00:00:00.000
    2008-08-23 00:00:00.000
    2008-08-24 00:00:00.000
    2008-08-25 00:00:00.000
    2008-08-26 00:00:00.000
    2008-08-27 00:00:00.000
    2008-08-28 00:00:00.000
    2008-08-29 00:00:00.000
    2008-08-30 00:00:00.000
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • luyesql
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 14:38:036楼 得分:0
    谢谢大家!我试试去
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • luyesql
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 16:24:237楼 得分:0
    declare @T table([日期] varchar(10),[工作内容] nvarchar(8),[发布人] nvarchar(50))
    Insert @T
    select '2008-8-01',N'content1','' union all
    select '2008-8-01',N'content2',''


    select
    [日期]=case when [工作内容]=(select top 1 [工作内容] from @T where [日期]=t.[日期]) then [日期] else '' end,
    [工作内容],
    [发布人]
    from
    @T T
    (2 個資料列受到影響)
    日期        工作内容    发布人
    ---------- -------- --------------------------------------------------
    2008-8-01  content1
              content2


    聚合表达式中,text、ntext 和 image 数据类型无效。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved