在具有多个CTE的外部查询中将结果标记为文本标签

时间:2019-07-15 18:40:17

标签: sql-server

我试图根据提出的问题找出如何将SumAmounts标记为好项目和好项目。

以下是提供的问题和提示: 行使 在成功的项目中,那些筹集到最低金额的100%至150%的项目是好项目,而那些筹集超过150%的项目是好项目。显示项目数(将其命名为“计数”列)以及代表项目好坏(好项目或好项目)的字符串。将该列命名为标签。

结果应类似于以下内容:

计数标签
16个好项目
7个很棒的项目

卡住了吗?这是一个提示! 您将需要两个CTE:一个用于筹集100-150%的项目,另一个用于筹集150%以上的项目。使用HAVING子句检查条件。使用UNION ALL可以显示两个查询的结果。

要创建“标签”列,请使用:

N'Good projects'AS标签 和

N'Great projects'AS Tag 注意N –列应为nvarchar类型。

这是我的代码所在的位置:

WITH GoodP AS(
SELECT d.ProjectId, p.MinimalAmount,SUM(d.Amount)AS SumAmount
FROM Donation d
JOIN Project p
ON p.Id = d.ProjectId
GROUP BY d.ProjectId, p.MinimalAmount
HAVING SUM(d.Amount)>= p.MinimalAmount AND SUM(d.Amount) <= p.MinimalAmount*1.5
),

GreatP AS(
SELECT d.ProjectId, p.MinimalAmount,SUM(d.Amount)AS SumAmount
FROM Donation d
JOIN Project p
ON p.Id = d.ProjectId
GROUP BY d.ProjectId, p.MinimalAmount
HAVING SUM(d.Amount)> p.MinimalAmount*1.5
)

SELECT COUNT(ProjectId) AS Count, CASE WHEN SumAmount IS NULL THEN '0' ELSE N'Good projects' END AS Tag
FROM GoodP
Group by SumAmount
UNION ALL
SELECT COUNT(ProjectId) AS Count, CASE WHEN SumAmount IS NULL THEN '0' ELSE N'Great projects' END AS Tag
FROM GreatP
Group by SumAmount

我的外部查询正在生成Good项目和Great项目,但是我的计数都是左栏中的单个计数。事实是我不确定如何从SumAmount创建标签,或者是否应该这样做。

1 个答案:

答案 0 :(得分:0)

我想我真的不应该将它称为作业,因为我自己学习SQL来帮助我提高工作水平。我会尽我所能,因为SQL已经帮助我完成了工作。

我已经发布了问题,提示和可以提出的最佳代码(经过几次尝试,我尝试了什么)来回答问题。

话虽如此,我只是从字面上理解了提示,需要在外部查询中执行以下操作:

SELECT COUNT(ProjectId) AS Count, N'Good projects' AS Tag
FROM GoodP
UNION ALL
SELECT COUNT(ProjectId) AS Count, N'Great projects' AS Tag 
FROM GreatP;