求个语句

昵称90天可改一次 2014-04-16 11:04:01

create table test(月份 nvarchar(20),数量 int,标题 nvarchar(10))
insert into test
select '2013-08',100,'测试' union all
select '2013-09',100,'测试' union all
select '2013-08',100,'测试1' union all
select '2014-04',100,'测试1' union all
select '2014-08',100,'测试1' union all
select '2013-08',100,'测试2'

求参数 @标题=‘测试’时 显示结果为
2013-01 null null 2014-01 null null
2013-02 null null 2014-02 null null
2013-03 null null 2014-03 null null
2013-04 null null 2014-04 null null
2013-05 null null 2014-05 null null
2013-06 null null 2014-06 null null
2013-07 null null 2014-07 null null
2013-08 100 '测试' 2014-08 null null
2013-09 100 '测试' 2014-09 null null
2013-10 null null 2014-10 null null
2013-11 null null 2014-11 null null
2013-12 null null 2014-12 null null
@标题=‘测试1’时 显示结果为
2013-01 null null 2014-01 null null
2013-02 null null 2014-02 null null
2013-03 null null 2014-03 null null
2013-04 null null 2014-04 100 '测试1'
2013-05 null null 2014-05 null null
2013-06 null null 2014-06 null null
2013-07 null null 2014-07 null null
2013-08 100 '测试1' 2014-08 100 '测试1'
2013-09 null null 2014-09 null null
2013-10 null null 2014-10 null null
2013-11 null null 2014-11 null null
2013-12 null null 2014-12 null null
@标题=‘测试5’时 显示结果为
2013-01 null null 2014-01 null null
2013-02 null null 2014-02 null null
2013-03 null null 2014-03 null null
2013-04 null null 2014-04 null null
2013-05 null null 2014-05 null null
2013-06 null null 2014-06 null null
2013-07 null null 2014-07 null null
2013-08 null null 2014-08 null null
2013-09 null null 2014-09 null null
2013-10 null null 2014-10 null null
2013-11 null null 2014-11 null null
2013-12 null null 2014-12 null null

有什么好方法么~
...全文
138 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 OrchidCat 的回复:
DECLARE @i VARCHAR(10) = '测试5';
WITH    TT
          AS ( SELECT   number
               FROM     master..spt_values
               WHERE    type = 'P'
                        AND number BETWEEN 0 AND 11
             )
    SELECT  CONVERT(VARCHAR(7), A.dd, 120) AS dd ,
            A.数量 ,
            A.标题 ,
            CONVERT(VARCHAR(7), ISNULL(B.dd,DATEADD(yy,1,A.dd)), 120) dd ,  --修正一下这里
            B.数量 ,
            B.标题
    FROM    ( SELECT    DATEADD(mm, TT.number, '2013-01-01') AS dd ,
                        T.数量 ,
                        T.标题
              FROM      TT
                        LEFT JOIN test T ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2013-01-01'), 120) = T.月份
              WHERE     T.标题 = @i
                        OR T.标题 IS NULL
            ) A
            left JOIN ( SELECT DATEADD(mm, TT.number, '2014-01-01') AS dd ,
                                T1.数量 ,
                                T1.标题
                         FROM   TT
                                LEFT JOIN test T1 ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2014-01-01'), 120) = T1.月份
                         WHERE  T1.标题 = @i
                                OR T1.标题 IS NULL
                       ) B ON DATEPART(mm, A.dd) = DATEPART(mm, b.dd)
ORDER BY A.dd




3Q大神
Mr_Nice 2014-04-16
  • 打赏
  • 举报
回复
DECLARE @i VARCHAR(10) = '测试5';
WITH    TT
          AS ( SELECT   number
               FROM     master..spt_values
               WHERE    type = 'P'
                        AND number BETWEEN 0 AND 11
             )
    SELECT  CONVERT(VARCHAR(7), A.dd, 120) AS dd ,
            A.数量 ,
            A.标题 ,
            CONVERT(VARCHAR(7), ISNULL(B.dd,DATEADD(yy,1,A.dd)), 120) dd ,  --修正一下这里
            B.数量 ,
            B.标题
    FROM    ( SELECT    DATEADD(mm, TT.number, '2013-01-01') AS dd ,
                        T.数量 ,
                        T.标题
              FROM      TT
                        LEFT JOIN test T ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2013-01-01'), 120) = T.月份
              WHERE     T.标题 = @i
                        OR T.标题 IS NULL
            ) A
            left JOIN ( SELECT DATEADD(mm, TT.number, '2014-01-01') AS dd ,
                                T1.数量 ,
                                T1.标题
                         FROM   TT
                                LEFT JOIN test T1 ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2014-01-01'), 120) = T1.月份
                         WHERE  T1.标题 = @i
                                OR T1.标题 IS NULL
                       ) B ON DATEPART(mm, A.dd) = DATEPART(mm, b.dd)
ORDER BY A.dd




Mr_Nice 2014-04-16
  • 打赏
  • 举报
回复
DECLARE @i VARCHAR(10) = '测试1';
WITH    TT
          AS ( SELECT   number
               FROM     master..spt_values
               WHERE    type = 'P'
                        AND number BETWEEN 0 AND 11
             )
    SELECT  CONVERT(VARCHAR(7), A.dd, 120) AS dd ,
            A.数量 ,
            A.标题 ,
            CONVERT(VARCHAR(7), B.dd, 120) dd ,
            B.数量 ,
            B.标题
    FROM    ( SELECT    DATEADD(mm, TT.number, '2013-01-01') AS dd ,
                        T.数量 ,
                        T.标题
              FROM      TT
                        LEFT JOIN test T ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2013-01-01'), 120) = T.月份
              WHERE     T.标题 = @i
                        OR T.标题 IS NULL
            ) A
            INNER JOIN ( SELECT DATEADD(mm, TT.number, '2014-01-01') AS dd ,
                                T1.数量 ,
                                T1.标题
                         FROM   TT
                                LEFT JOIN test T1 ON CONVERT(VARCHAR(7), DATEADD(mm,
                                                              TT.number,
                                                              '2014-01-01'), 120) = T1.月份
                         WHERE  T1.标题 = @i
                                OR T1.标题 IS NULL
                       ) B ON DATEPART(mm, A.dd) = DATEPART(mm, b.dd)





yoan2014 2014-04-16
  • 打赏
  • 举报
回复
可以建一张表存下所有的月份,然后用这张表left join 你的张表
  • 打赏
  • 举报
回复
按年分开查询也可 若无该标题 填充null 求语句

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧