【问题标题】:Access alias in subquery子查询中的访问别名
【发布时间】:2011-07-15 21:36:36
【问题描述】:

我需要从子查询中的外部查询访问别名,就像这段代码一样。除了它不工作。有没有办法做到这一点? 我的目标是为每个 OwnerIdName 制作这些聚合函数,这是我能想到的唯一方法。 我正在使用 SQL Server 2008。

谢谢

SELECT Incident.OwnerIdName as OIN
  ,(SELECT COUNT(*)
    FROM Incident 
    WHERE CreatedOn BETWEEN '2011/1/1' AND '2011/1/31'
    AND Incident.OwnerIdName = OIN ) as CasesOpened
  ,(SELECT COUNT(*)
    FROM IncidentResolution 
    WHERE ActualEnd BETWEEN '2011/1/1' AND '2011/1/31'
            AND Incident.OwnerIdName = OIN ) as CasesClosed
FROM Incident

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    你不能直接使用列名吗..?喜欢..

    SELECT Inc.OwnerIdName as OIN
      ,(SELECT COUNT(*)
        FROM Incident 
        WHERE CreatedOn BETWEEN '2011/1/1' AND '2011/1/31'
        AND Incident.OwnerIdName = Inc.OwnerIdName ) as CasesOpened
      ,(SELECT COUNT(*)
        FROM IncidentResolution 
        WHERE ActualEnd BETWEEN '2011/1/1' AND '2011/1/31'
                AND Incident.OwnerIdName = Inc.OwnerIdName ) as CasesClosed
    FROM Incident Inc
    

    如果您想直接使用别名,则必须在查询的早期执行此操作,然后将其用于所有标量子查询。..

    SELECT INC.OIN
      ,(SELECT COUNT(*)
        FROM Incident 
        WHERE CreatedOn BETWEEN '2011/1/1' AND '2011/1/31'
        AND Incident.OwnerIdName = INC.OIN ) as CasesOpened
      ,(SELECT COUNT(*)
        FROM IncidentResolution 
        WHERE ActualEnd BETWEEN '2011/1/1' AND '2011/1/31'
                AND Incident.OwnerIdName = INC.OIN ) as CasesClosed
    from 
    (Select OwnerIdName OIN
      FROM Incident) INc 
    

    【讨论】:

    • 谢谢。我没想到。 :)
    【解决方案2】:

    试试这个(适用于 >= SQL 2005):

    WITH 
        CreatedQry AS
        (
            SELECT OwnerIdName, COUNT(1) AS CreatedCount
              FROM  Incident 
            WHERE CreatedOn BETWEEN '2011/1/1' AND '2011/1/31'
        ),
        EndQry AS
        (
            SELECT OwnerIdName, COUNT(1) AS EndCount
              FROM  IncidentResolution  
            WHERE ActualEnd  BETWEEN '2011/1/1' AND '2011/1/31'
        )
        SELECT  CreatedQry.OwnerIdName, CreatedCount, EndCount
          FROM  CreatedQry LEFT JOIN EndQry
            ON  CreatedQry.OwnerIdName = EndQry.OwnerIdName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多