问题1:IF OBJECT_ID('Table_Name') IS NOT NULL
         drop table Table_Name

if exists (select * from sysobjects where name = 'Table_Name' and xtype = 'U') 
drop table 'Table_Name'
什么区别?哪个更好?
貌似第一种支持所有的对象(检测对象是否存在)问题2:SELECT  COUNT(A0107) '总人数' ,
            SUM(CASE WHEN A0107 = '男' THEN 1
                     ELSE 0
                END) '男人数' ,
            SUM(CASE WHEN A0107 = '男' THEN 1
                     ELSE 0
                END) * 1.0 / COUNT(*) '男所占比率' ,
            SUM(CASE WHEN A0107 = '女' THEN 1
                     ELSE 0
                END) '女人数' ,
            SUM(CASE WHEN A0107 = '女' THEN 1
                     ELSE 0
                END) * 1.0 / COUNT(*) '女所占比率'
    FROM    dbo.A01
中的SUM(CASE WHEN A0107 = '男' THEN 1
                     ELSE 0
                END) '男人数' 
是什么个算法?意思是 把每次的为真的次数相加,然后得出总数?
sum(1 + 1 + 1 + ...),是这个意思吗?
万分感谢!!!

解决方案 »

  1.   

    @isMan = CASE WHEN A0107 = '男' THEN 1 ELSE 0 END 当时男人返回1否则返回0
    SUM(@isMan) = 男人总数  
      

  2.   

    1.object_id()是系統函數,而當前數據庫的系統表sysobjects
    都支持所有對象,只是sysobjects按xtype區分不同的數據庫對象類型
    2.SUM(CASE WHEN A0107 = '男' THEN 1
                         ELSE 0
                    END) '男人数' 
    統計所有A0107列的值為男的數量
      

  3.   


    --问题1
    OBJECT_ID是系统函数,返回架构范围内对象的数据库对象标识号
    sysobjects包含该数据库中的所有对象,如表 存储过程 视图 等信息
    IF OBJECT_ID('Table_Name') IS NOT NULL
             drop table Table_Name

    if exists (select * from sysobjects where name = 'Table_Name' and xtype = 'U') 
        drop table 'Table_Name'
    就相当于是分别根据名字和编号区别一个实体表,第一个更简洁。
    --问题2
    你的理解没问题,就是判断条件为真的,就记录一次,最后sum求所有条件为真的记录的和