Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 消除子查询_Sql_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Sql 消除子查询

Sql 消除子查询,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我正在寻找一种可能的方法来消除子查询 任何评论都会有帮助 SELECT [FacilityGroupID] ,[LocationGroupID] ,[MsrID] ,CAST(LEFT([ReportingPeriod],4) + '-' + RIGHT([ReportingPeriod],2) + '-01' as datetime) as create_timestamp ,SUM([D

我正在寻找一种可能的方法来消除子查询

任何评论都会有帮助

SELECT
    [FacilityGroupID]
    ,[LocationGroupID]
    ,[MsrID]
    ,CAST(LEFT([ReportingPeriod],4) + '-' 
                + RIGHT([ReportingPeriod],2)
                + '-01' as datetime) as create_timestamp
    ,SUM([Denominator]) as [Denominator]
    ,SUM([Numerator]) as [Numerator]
FROM
(
    SELECT 
        DISTINCT
        Tob.FacilitygroupId
        ,Tob.LocationgroupId
        ,Tob.Reportingperiod
        ,Tob.Denominator
        ,DimIndicator.MsrId
        ,CASE
            WHEN DimIndicator.MsrID = Tob.MsrId THEN 1
            ELSE 0 
        END as Numerator

    from
        BIReport.dbo.vIndianatest "Tob"
            INNER JOIN [BIreport].[dbo].[DimIndicator] "DimIndicator"
                on Tob.MsrSubGroupId = DimIndicator.MsrSubGroupId
) as "Inner"

GROUP BY
    [FacilityGroupID]
    ,[LocationGroupID]
    ,[MsrID]
    ,CAST(LEFT([ReportingPeriod],4) + '-' 
                + RIGHT([ReportingPeriod],2)
                + '-01' as datetime) 
与子查询一样,性能太慢


谢谢

您是否尝试过使用
<使用
对内联视图进行子查询

的一般用法:

with clausename AS
(
subquery
)
main query referencing clausename;
例如:

-- define with clause
with saletot as
    (
     select dname, sum(sal) as dept_total
     from emp, dept
     where emp.deptno = dept.deptno
     group by dname
    )
-- Main query which use the with clause
   select dname, dept_total
   from saletot        -- Reference to with clause
   order by dept_total desc;

您是否尝试过删除不同的
?还请发布查询的解释计划。从内部查询中求和的分母和分子值将在外部查询中求和。如果只运行嵌套的select,是否太慢?您看过索引了吗?我知道您试图在转换之前将日期/时间作为“国际”(ISO)格式,但不幸的是,SQL Server认为该特定格式仍然可以本地化(检查第一个)-最好删除破折号。另外,
ReportingPeriod
是否已经是日期/时间类型?也许有一个更好(性能更好)的函数可以在本月初使用;如中所示,可能还有其他解决方案可以提高性能。如果对select使用with子句,则在发生联接的位置,联接只运行一次,我认为是这样。我的意思是:使用INTERNAR as select DISTINCT Tob.FacilitygroupId。。。从BIReport.dbo.vIndianatest“Tob”内部联接[BIReport].[dbo].[DimIndicator]“DimIndicator”。。。通过…@OliC从内部组中选择[FacilityGroupID]、[LocationGroupID]、SUM([Denominor])作为[Denominor]、SUM([Numerator])作为[Numerator]。-感谢您的输入