首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一道SQL试题,欢迎提意见 [已结帖,结帖人:YCUTC]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • YCUTC
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-18 22:28:07 楼主
    1、求今年与去年各月销售数量的差值
    数据表:
    销售订单明细OrderDetails
    字段(销售日期,销售数量)
    返回结果
    年月、今年数量、去年数量、今年与去年差值

    SELECT A.YM AS ‘年月’,
    A.salemun AS ‘今年数量’ ,
    B.salemun AS ‘去年数量’,
    (SELECT A.salemun-B.salemun from A,B) AS ‘今年与去年差值’
    WHERE
    (
    SELECT (SELECT STR(YEAR(销售日期)+’ ’+STR(MONTH(销售日期)))  AS YM ,
    SUM(销售数量) AS salemun
    WHERE YEAR(销售日期)=2008
    GROUP BY MONTH(销售日期)
    )  A,
    (
    SELECT (SELECT STR(YEAR(销售日期)+’ ’+STR(MONTH(销售日期)))  AS YM ,
    SUM(销售数量) AS salemun
    WHERE YEAR(销售日期)=2007
    GROUP BY MONTH(销售日期)
    )  B
    WHERE A.MONTH(YM)=B.MONTH(YM)


    上面是我做的答案,不知道正确与否,请高手指点迷津!!!!
    希望能说得详细些。
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • it_sql
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 22:35:121楼 得分:0
    有点乱,你可以测试一下啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • YCUTC
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 22:37:332楼 得分:0
    如果我可以测试,我就不麻烦各位了 。
      问题是条件有限,没办法调试。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • roy_88
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-08-18 23:31:073楼 得分:0
    语句表名在哪里?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • roy_88
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-08-18 23:38:244楼 得分:10
    SQL code
    select '2008 '+rtrim(a.月份) as 年月, a.销售数量 as 今年数量, isnull(b.销售数量,0) as 去年数量,--去年没有时为0 a.销售数量-isnull(b.销售数量,0) as 今年与去年差值 from (select month(销售日期)月份,sum(销售数量)销售数量 from OrderDetails where YEAR(销售日期)=2008 group by month(销售日期))a left join (select month(销售日期)月份,sum(销售数量)销售数量 from OrderDetails where YEAR(销售日期)=2007 group by month(销售日期))b on a.月份=b.月份
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WWWTYB
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 00:42:135楼 得分:0
    引用 4 楼 roy_88 的回复:
    SQL codeselect
        '2008 '+rtrim(a.月份) as 年月,
        a.销售数量 as 今年数量,
        isnull(b.销售数量,0) as 去年数量,--去年没有时为0
        a.销售数量-isnull(b.销售数量,0) as 今年与去年差值
    from
        (select month(销售日期)月份,sum(销售数量)销售数量 from OrderDetails where YEAR(销售日期)=2008 group by month(销售日期))a
    left join
        (select month(销售日期)月份,sum(销售数量)销售数量 from Orde…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • binyun530
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 23:08:196楼 得分:15
    假设日期字段是SaleDate
    SQL code
    Select DatePart(yyyy,SaleDate) AS Year,DatePart(MM,SaleDate) AS MM, SUM(QTY) AS SumQTY From Table1 Where DatePart(yyyy,SaleDate)='2008' Group by DatePart(yyyy,SaleDate),DatePart(MM,SaleDate) Union All Select DatePart(yyyy,SaleDate) AS Year,DatePart(MM,SaleDate) AS MM, SUM(QTY)*-1 AS SumQTY From Table1 Where DatePart(yyyy,SaleDate)='2007' Group by DatePart(yyyy,SaleDate),DatePart(MM,SaleDate)


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clq271520093
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 23:55:467楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • KOOK_OKKO
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:09:148楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wwd252
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:18:129楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoujp_xyz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:54:1710楼 得分:20
    测试数据
    SQL code
    CREATE TABLE OrderDetails ( id INT IDENTITY(1,1), t DATETIME, COUNT1 INT ) INSERT orderdetails SELECT '2008-12-4',250 UNION ALL SELECT '2008-8-1',23 UNION ALL SELECT '2007-1-1',12 UNION ALL SELECT '2007-3-4',45 UNION ALL SELECT '2007-12-6',463 UNION ALL SELECT '2007-8-4',100 select '2008 '+rtrim(a.月份) as 年月, a.销售数量 as 今年数量, isnull(b.销售数量,0) as 去年数量,--去年没有时为0 a.销售数量-isnull(b.销售数量,0) as 今年与去年差值 from (select month(t)月份,sum(count1)销售数量 from OrderDetails where YEAR(t)=2008 group by month(t))a left join (select month(t)月份,sum(count1)销售数量 from OrderDetails where YEAR(t)=2007 group by month(t))b on a.月份=b.月份 ----------------------------------- 结果: 年月 今年数量 去年数量 今年与去年差值 2008 8 23 100 -77 2008 12 250 463 -213
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zanyzyg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:42:0411楼 得分:5

    楼主的应该有问题吧

    两个YM,一个2008,一个2007,你WHERE A.MONTH(YM)=B.MONTH(YM),会有结果吗?
    修改 删除 举报 引用 回复

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