SQL2005-CTE的使用
2008-04-20 13:31
204 查看
CTE的使用确实可以简化代码,明晰逻辑,特别是在构建一些查询表的时候。以前用#tempTable方式比较麻烦。这一周够忙得,写这个算是带来一些乐趣。(*^__^*)。
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
需求描述:
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
Google 标记: SQL2005, CTE
相关文章推荐
- SQL Server 2005中的SQLCMD工具使用
- 使用sql 2005 jar 包替换 2000 jar包异常:com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此游标类型/并发组合。
- SQL Server 2005+ 使用 CTE 分割字符串
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL
- sql server 2005/2008 设置 sql身份验证 和 sa空密码(像sql2000一样使用)(转载)
- MS SQL SERVER 2005 中游标的使用
- SQL Server 2005 使用 SqlBulkCopy 和 TransactionScope 一例
- Sql学习第三天——SQL 关于CTE(公用表达式)的递归查询使用
- sqlser 2005 使用执行计划来优化你的sql
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
- SQL Server中TEXT/NTEXT字段内容替换方法总结(SQL 2005及以上建议使用VARCHAR(MAX)/NVARCHAR(MAX)代替)
- 在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- 技巧:SQL 2005 使用分区表来处理千万级行数据
- 使用查询分析器和SQLCMD分别登录远程的SQL2005的1434端口
- SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
- .NET 2.0 SQL依赖注意事项(转载:原文《使用SQL Server 2005 Query Notification的几个注意事项》)
- sql 2005如何使用被禁止的"xp_cmdshell"
- [转]SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL