SQL2005-CTE的使用

本文介绍了如何使用CTE(公用表表达式)简化复杂的SQL查询逻辑,通过多个CTE的联合使用,实现了榜单的综合评分计算。文章详细展示了如何进行多表连接,并通过伪代码形式给出具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTE的使用确实可以简化代码,明晰逻辑,特别是在构建一些查询表的时候。以前用#tempTable方式比较麻烦。这一周够忙得,写这个算是带来一些乐趣。(*^__^*)。

需求描述:

1:按一定规则计算榜单的鲜花总得分
2:按 鲜花总分、城市数、商户总数、回应等比例计算Hot值
3:写入特定表

代码实现(伪代码):


--活动的总热度分值(CTE1)
WITH QUERY_MyListTotalScore AS
(
SELECT 
SUM(...)AS Score
,VoteID AS ListID
FROM [鲜花Tabel] WHERE (...)
),
--榜单城市的比例分值(CTE2)
QUERY_MyListCityCount AS
(
SELECT COUNT(*) AS CityCount,ListID,CityID,ShopCount
FROM [榜单商户]
JOIN [榜单] L ON (...)
JOIN [商户] S ON (...)
GROUP BY CityID,ListID,ShopCount
),
--最后生成结果(CTE3)
QUERY_MyListHot AS
(
SELECT ListID,CityID,Score,CityCount,ShopCount,........ AS Hot
FROM QUERY_MyListCityCount C
LEFT JOIN QUERY_MyListTotalScore T ON C.ListID = T.ListID
)
--相关表操作(SELECT、UPDATE、 INSERT、DELETE)
SELECT * FROM QUERY_MyListHot ORDER BY ListID

关键是CTE的多表连接使用。一般情况我们也就用一个CTE。这里要注意的就是多表CTE,要使用“,”分割。开始我习惯的用“;”提示错误,以为CTE不支持联用,险些就不用CTE了。

Google 标记: SQL2005, CTE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值