【问题标题】:multiple count on derived table派生表上的多次计数
【发布时间】:2016-10-15 03:24:40
【问题描述】:

我正在尝试使用派生表计算入围名单和感兴趣的总数,但它不起作用。

select  (SELECT COUNT(ID) FROM Dtable WHERE Is_shortlisted=1) AS TOTALSHORLISTED,           
        (SELECT COUNT(ID) FROM Dtable WHERE Is_Interested=1) AS TOTALINERESTED 
from (
        SELECT  BM.ID,
                BM.Is_Interested,
                BM.Is_shortlisted,
                BM.Business_Masla_Status_ID
        FROM  Business_Maslahal BM
        INNER join Vw_MaslaInfo MI 
            on BM.[MaslaHal_ID]=MI.ID and BM.ID=2 AND MI.Masla_status_ID IN(1,2) 
) Dtable

【问题讨论】:

    标签: sql-server derived-table


    【解决方案1】:

    试试这个方法:

    select  SUM(CASE WHEN Is_shortlisted=1 THEN 1 ELSE 0 END) AS TOTALSHORLISTED,
            SUM(CASE WHEN Is_Interested=1 THEN 1 ELSE 0 END) AS TOTALINERESTED 
    from (
        SELECT  BM.ID,
                BM.Is_Interested,
                BM.Is_shortlisted,
                BM.Business_Masla_Status_ID
        FROM  Business_Maslahal BM
        INNER join Vw_MaslaInfo MI 
            on BM.[MaslaHal_ID]=MI.ID and BM.ID=2 AND MI.Masla_status_ID IN(1,2) 
    ) Dtable
    

    【讨论】:

      【解决方案2】:

      其实你甚至不需要派生表:

      SELECT  SUM(CASE WHEN Is_shortlisted=1 THEN 1 ELSE 0 END) AS TOTALSHORLISTED,
              SUM(CASE WHEN Is_Interested=1 THEN 1 ELSE 0 END) AS TOTALINERESTED 
      FROM  Business_Maslahal BM
      INNER join Vw_MaslaInfo MI 
      ON BM.[MaslaHal_ID]=MI.ID 
      WHERE and BM.ID=2 
      AND MI.Masla_status_ID IN(1,2)
      

      我还将一些条件从ON 子句移至WHERE 子句。它应该对结果没有影响,但它使查询更具可读性。

      【讨论】:

      • 不错!我懒得重写而不使用子查询:)
      • 谢谢,我觉得这样效率更高。
      猜你喜欢
      • 2011-12-08
      • 2020-12-04
      • 1970-01-01
      • 2013-05-26
      • 2010-12-10
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多