[英]SQL Server: How to add Count to nested Select query
我有一个存储过程,可以使用下面的查询按预期方式从三个单独的表中获取数据。
如何为每个级别添加一个计数,以使我知道为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
蒂姆,非常感谢您对此提供的任何帮助。
我认为您可以使用窗口函数获得想要的东西。 请注意,尽管如此,每个元素的计数都会重复:
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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.