SQL2005-CTE的使用

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

你可能感兴趣的:(C++,c,Google,活动,C#)