zoukankan      html  css  js  c++  java
  • 写几个关于sql server的例子

    写几个关于sql server的例子,也是从其他地方看到的,自己又拿过来用用。勿笑。

    (一)、一,地域表:

    Id 地域
    1 中国
    2 美国
    3 英国
    4 法国....
    二,产品表
    产品Id 地域Id 产品名称
    1 1 产品1
    2 2 产品2
    3 3 产品1
    4 1 产品3......
    条件 1。产品在地域表中销售地域id来自地域表,如果在本区域销售则为Yes否则为No,2.地域表的值不固定
    现在读成
      产品名称 中国 美国 英国 法国 ....
      产品1 Yes NO Yes No  
      产品2 No Yes No No
      产品3 Yes No No No

    解答:

    select t.产品名称,case t.中国 WHEN t.产品名称 THEN 'YES' ELSE 'NO' END 中国
    ,case t.美国 WHEN t.产品名称 THEN 'YES' ELSE 'NO' END 美国
    ,case t.英国 WHEN t.产品名称 THEN 'YES' ELSE 'NO' END 英国
    ,case t.法国 WHEN t.产品名称 THEN 'YES' ELSE 'NO' END 法国
    from (select Area.area_Name,Product.product_Name,Product.product_Name 产品名称 from Area join Product ON Area.area_id =Product.area_id)t0
    pivot(max(t0.Product_Name) for t0.area_Name in ([中国],[美国],[英国],[法国]))t;
    (二)、 表A   

    字段ID,Name

    表B

    字段ID,AID,intergral,state

     

    A表是用户表,B表是积分表

    字段state表示加或减  0代表减  1代表加  intergral代表积分

    我要查询每个用户有多少积分,显示出Name和intergral

    解答:

    SELECT NM, SUM(NUM) FROM (

    SELECT A.NAME AS NM,

    (CASE B.STATE WHEN 1 THEN B.INTERGRALWHEN 0 THEN B.INTERGRAL * -1 END) AS NUM

    FROM A LEFT JOIN BON A.ID = B.AID

    ) AS C GROUP BY C.NM;

    (三)、

    问题:假设有张学生成绩表如下:
    姓名 课程 分数
    张三 语文 74
    张三 数学 83
    张三 物理 93
    李四 语文 74
    李四 数学 84
    李四 物理 94
    (得到如下结果):
    姓名 语文 数学 物理
    李四 74   84   94
    张三 74   83   93

    解答:

    --SQL SERVER 2005 动态SQL。
    declare @sql varchar(8000)
    select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
    set @sql = '[' + @sql + ']'
    exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
    --得到SQL SERVER 2005 静态SQL。
    select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b

    (四)、

    表a

    id(varchar 主键)   userid   content  time

    asdsd                 0001     aaa        2010-1-1

    asddff                 0002     dfdf       2010-1-2

    sdsdd                 0003     asdsd    2010-1-4

    dfdffff                 0002      fdgfdg   2010-1-4

    要求用sql语句查询,每一个人所发表的最新言论,即按时间排序,

    解答:

    SELECT NM, SUM(NUM) as jia FROM (
    SELECT U.UserName AS NM,
    (CASE F.STATE WHEN 1 THEN F.Fen WHEN 0 THEN F.Fen * -1 END) AS NUM
    FROM tblUser as U LEFT JOIN tblFen as F on U.UserId = F.UserId
    ) AS C GROUP BY C.NM;

         

    这个有更精确的解答:http://blog.csdn.net/xys_777/archive/2010/06/22/5685953.aspx

  • 相关阅读:
    [ZT]SAP ECC5.0 Working Log TO 2008.5.26
    VS错误:Lc.exe 已退出错误 返回代码 1
    如何实现两个数据库的同步?
    sp_configure 'max server memory'
    [轉]中国油价世界最高 是美国7倍!
    C#WinForm App自动更新(Live Update)架构
    利用批處理自動在異地備份數據庫
    18种根据屏幕字段查找潜在数据的技巧
    [ZT]2008年到校园招聘各企业待遇曝光
    吉祥物由于具有商业气息,所以历届奥运会吉祥物都没有出场。
  • 原文地址:https://www.cnblogs.com/diony/p/1893467.html
Copyright © 2011-2022 走看看