创建一个SQL报表,将聚合表达式的解决方案和子查询的结果视为不同的行

创建一个SQL报表,将聚合表达式的解决方案和子查询的结果视为不同的行,sql,sql-server,Sql,Sql Server,这里有点奇怪。我们在这里使用Lansweeper作为我们的IT帮助台,其报告是使用sql构建的。我们还可以使用这些报告制作图表。我的老板要求提供一张图表,显示我们今年更换电脑的进展情况。我提出的想法是一个饼图,随着计算机被取代,它会逐渐填满。我使用的两条数据是: 一个计数函数,用于计算本财年将要更换的计算机数量。使用CounttblAssets.AssetID函数,其中tblAssetCustom.Custom1='20' 一个子查询,获取今年到期的计算机的原始数量115,并从上面减去计算的数量

这里有点奇怪。我们在这里使用Lansweeper作为我们的IT帮助台,其报告是使用sql构建的。我们还可以使用这些报告制作图表。我的老板要求提供一张图表,显示我们今年更换电脑的进展情况。我提出的想法是一个饼图,随着计算机被取代,它会逐渐填满。我使用的两条数据是:

一个计数函数,用于计算本财年将要更换的计算机数量。使用CounttblAssets.AssetID函数,其中tblAssetCustom.Custom1='20' 一个子查询,获取今年到期的计算机的原始数量115,并从上面减去计算的数量,这将为我们提供已更换的计算机总数。 因此在今年年初,第一个数字将占据整个图表,第二个数字将设置为0 115-115。当替换年份为20的计算机从系统中删除时,第一个数字将向下勾选,第二个数字将向上勾选。我的代码如下所示:

Select Top 1000000 Count(tblAssets.AssetID) As [Computers to be Replaced],
 (Select 115 - Count(tblAssets.AssetID) As [Computers Replaced]) As
 [Computers Replaced]
From tblAssets
 Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
 Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype
 Inner Join tblAssetGroupLink On tblAssets.AssetID = tblAssetGroupLink.AssetID
 Inner Join tblAssetGroups On tblAssetGroups.AssetGroupID =
   tblAssetGroupLink.AssetGroupID
Where tblAssetCustom.Custom1 = '20' And tblAssetCustom.State = 1 And
 tblAssetGroups.AssetGroup = 'Computers'
Group By tblAssetCustom.Custom1
我很快就能让它工作了。。。我可以让报告提供我需要使用的数字,但我需要弄清楚如何格式化报告,以便Lansweeper可以创建图表


我甚至不知道这是否可能,因为我不是一名编码员,而且几乎没有和令人惊讶地一瘸一拐地走到这一步,但我需要弄清楚如何将我的列名作为一列中的条目,将我的数字作为另一列中的条目。一旦我可以将数据分成单独的行,图表功能就可以工作了。这有可能吗?有人对如何处理这个问题有想法或建议吗?谢谢

如果希望两个值位于不同的行上,可以将现有查询用作CTE,然后使用并集分别获取值:

WITH CTE AS (
    Select Count(tblAssets.AssetID) As [Computers to be Replaced],
     115 - Count(tblAssets.AssetID) As [Computers Replaced]
    From tblAssets
     Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
     Inner Join tsysAssetTypes On tsysAssetTypes.AssetType = tblAssets.Assettype
     Inner Join tblAssetGroupLink On tblAssets.AssetID = tblAssetGroupLink.AssetID
     Inner Join tblAssetGroups On tblAssetGroups.AssetGroupID =
       tblAssetGroupLink.AssetGroupID
    Where tblAssetCustom.Custom1 = '20' And tblAssetCustom.State = 1 And
     tblAssetGroups.AssetGroup = 'Computers'
    Group By tblAssetCustom.Custom1
)
SELECT 'Computers to be Replaced' AS name, [Computers to be Replaced] AS value
FROM CTE
UNION ALL
SELECT 'Computers Replaced', [Computers Replaced]
FROM CTE
ORDER BY name DESC
输出将类似于

name                        value
Computers to be Replaced    53
Computers Replaced          62

你好,尼克,谢谢你的建议-你的输出正是我想要得到的。我尝试将您的代码输入到系统中,但报告编辑器在第一次选择时遇到了阻碍。不幸的是,没有什么有用的。。。SELECT语句无效。第14行位置1处的意外令牌选择。我是否需要对代码进行一些调整,或者我遗漏了什么?谢谢你的帮助@很抱歉-我刚意识到我不小心在CTE的末端放了一个。我已经编辑了答案,不用担心!上次我遇到这个错误,是因为我在Select语句后缺少了一个逗号,所以这就是我要寻找的,并假设你的逗号是正确的!我们就快到了。。。我不得不在CTE中添加一个列名,我不得不删除ORDERBY命令,因为它抛出了一个错误。然而虽然在编辑器中没有发现其他错误,但我尝试运行该报告,并收到消息Error:Error syntax near。。。。这是非常具体的。据我所知,封闭括号附近的所有内容都是correct@tlonde是的,很抱歉,我已经删除了As[Computers Replaced],因为我没有注意到您将其用作子查询,但无论如何,它都不需要作为子查询。您得到的错误是因为您在该子查询中没有FROM,如果您像我在最新编辑中所做的那样删除子查询,它应该可以工作…Morning@Nick。刚回到办公室试了一下,还是没什么好运气。。。仍然出现错误:附近的语法不正确。我从CTE中获取代码并自行运行,因此这篇文章似乎很高兴。所以这个问题似乎在工会的某个地方。我也会四处挖掘,看看有没有什么发现。谢谢你的持续帮助!