【问题标题】:SQL Server: How to add Count to nested Select querySQL Server:如何将计数添加到嵌套选择查询
【发布时间】:2014-08-09 10:16:13
【问题描述】:

我有一个存储过程,它使用以下查询从三个单独的表中获取数据,该查询按预期工作。

如何为每个级别添加一个计数,以便我知道为 A.、B. 和 C. 选择了多少项目? 我尝试添加“COUNT(*) AS volume”,但随后出现一些列引用无效的错误。

BEGIN
    SET NOCOUNT ON;
    SELECT      A.itemID,
                A.title,
                A.sortID,
                CONVERT(VARCHAR(11), A.modDate, 106) AS modDate,
                A.modBy,
                (
                    SELECT      B.itemID,
                                B.parentID,
                                B.title,
                                B.sortID,
                                CONVERT(VARCHAR(11), B.modDate, 106) AS modDate,
                                B.modBy,
                                (
                                    SELECT      C.itemID,
                                                C.parentID,
                                                C.title,
                                                C.sortID,
                                                CONVERT(VARCHAR(11), C.modDate, 106) AS modDate,
                                                C.modBy
                                    FROM        ORG_Nav3 C
                                    WHERE       C.parentID = B.itemID
                                    AND         C.logStatus = 'active'
                                    ORDER BY    C.sortID, C.title
                                    FOR XML PATH('nav3'), ELEMENTS, TYPE
                                )
                    FROM        ORG_Nav2 B
                    WHERE       B.parentID = A.itemID
                    AND         B.logStatus = 'active'
                    ORDER BY    B.sortID, B.title
                    FOR XML PATH('nav2'), ELEMENTS, TYPE
                )
    FROM        ORG_Nav1 A
    WHERE       A.logStatus = 'active'
    ORDER BY    A.sortID, A.title
    FOR XML PATH('nav'), ELEMENTS, TYPE, ROOT('ranks')

END

非常感谢您提供的任何帮助,蒂姆。

【问题讨论】:

  • 查询正常,就是不知道怎么在这里加计数。
  • 您的查询可能有效,但它很长并且包含许多与您的问题无关的部分。这使人们很难回答您的问题。
  • 谢谢。我不希望有人重写整个查询。对于这个问题,查看最后一个嵌套查询已经对我有所帮助,因为其他级别遵循相同的结构。

标签: sql sql-server select stored-procedures count


【解决方案1】:

我认为你可以使用窗口函数得到你想要的。请注意,每个元素都会重复计数:

SELECT      A.itemID,
            A.title,
            A.sortID,
            CONVERT(VARCHAR(11), A.modDate, 106) AS modDate,
            A.modBy,
            COUNT(*) OVER () as CNT
            (
                SELECT      B.itemID,
                            B.parentID,
                            B.title,
                            B.sortID,
                            CONVERT(VARCHAR(11), B.modDate, 106) AS modDate,
                            B.modBy,
                            COUNT(*) OVER () as CNT
                            (
                                SELECT      C.itemID,
                                            C.parentID,
                                            C.title,
                                            C.sortID,
                                            CONVERT(VARCHAR(11), C.modDate, 106) AS modDate,
                                            C.modBy,
                                            COUNT(*) OVER () as CNT
                                FROM        ORG_Nav3 C
                                WHERE       C.parentID = B.itemID
                                AND         C.logStatus = 'active'
                                ORDER BY    C.sortID, C.title
                                FOR XML PATH('nav3'), ELEMENTS, TYPE
                            )
                FROM        ORG_Nav2 B
                WHERE       B.parentID = A.itemID
                AND         B.logStatus = 'active'
                ORDER BY    B.sortID, B.title
                FOR XML PATH('nav2'), ELEMENTS, TYPE
            )
FROM        ORG_Nav1 A
WHERE       A.logStatus = 'active'
ORDER BY    A.sortID, A.title
FOR XML PATH('nav'), ELEMENTS, TYPE, ROOT('ranks')

【讨论】:

  • 非常感谢,戈登 - 这太棒了!我会尽快接受。 :)
猜你喜欢
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多