• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SQL中间表使用

SQL中间表使用

作者:yidishuiooo的博客 字体:[增加 减小] 来源:互联网 时间:2017-09-02

yidishuiooo的博客通过本文主要向大家介绍了中间表,SQL,高级用法等相关知识,希望本文的分享对您有所帮助

1、在父子关系表中获取子孙后代结点
本次项目涉及的场景是,父节点入库后需要删除所有父子链中的子节点,思路是: 建立临时表后递归获取树中父子关系链数据:【From http://www.cnblogs.com/chriskwok/archive/2009/12/10/1621279.html】
CREATE PROCEDURE [dbo].[pGetDescendedPhysicalItemCatalogs]
(
@PhysicalItemCatalogId int
)
AS
set nocount on

 

BEGIN TRY
IF NOT EXISTS (SELECT * FROM [tempdb].sys.objects WHERE name = ‘##PhysicalItemCatalog’)
CREATE TABLE ##PhysicalItemCatalog(
[PhysicalItemCatalogId] [int] ,
[Name] nvarchar NOT NULL ,
[MnemonicCode] nvarchar NOT NULL ,
[ParentId] [int] NOT NULL ,
[IsDeleted] [bit] NOT NULL ,
[IsValid] [bit] NOT NULL ,
[PhysicalSpecialtyId] [int] NOT NULL ,
[Handled] [bit] NOT NULL default 0
)

INSERT ##PhysicalItemCatalog(PhysicalItemCatalogId, Name, MnemonicCode, ParentId, IsDeleted, IsValid, PhysicalSpecialtyId)
SELECT PhysicalItemCatalogId, Name, MnemonicCode, ParentId, IsDeleted, IsValid, PhysicalSpecialtyId 
FROM entity.PhysicalItemCatalog with(nolock) WHERE PhysicalItemCatalogId > -1 AND ParentId = @PhysicalItemCatalogId

DECLARE @catalogId int 
SELECT TOP 1 @catalogId = PhysicalItemCatalogId FROM ##PhysicalItemCatalog WHERE Handled = 0
IF @catalogId IS NOT NULL 
begin
    update ##PhysicalItemCatalog set Handled = 1 where PhysicalItemCatalogId = @catalogId
    exec [dbo].[pGetDescendedPhysicalItemCatalogs] @catalogId
end
ELSE
begin
    SELECT * FROM ##PhysicalItemCatalog
    DROP TABLE ##PhysicalItemCatalog
end

END TRY
BEGIN CATCH
IF EXISTS (SELECT * FROM [tempdb].sys.objects WHERE name = ‘##PhysicalItemCatalog’)
DROP TABLE ##PhysicalItemCatalog
END CATCH

set nocount off

2、项目中涉及很多需要各表几轮查找获取的数据集,并且有些数据在查找过程中反复使用,可以使用With表达式搞个临时结果集
【From http://blog.csdn.net/wang1127248268/article/details/53406564】
我们可以将公式表表达式(CET)视为临时结果集,在select、insert、update、delete或是create view语句的执行范围内进行定义。
with statNum(id, num) as
(
select cid, count(*) from student where id > 0 group by cid
)
select id, num from statNum order by id;

with statNum(id, num) as
(
select cid, count(*) from student where id > 0 group by cid
)
select max(id), avg(num) from statNum;

或者将查询的结果创建一个新表进行保存:【写法From http://blog.csdn.net/qq_34416191/article/details/51508888】
–将查询结果创建新表
select stuName,stuInfo.stuNo,writtenExam,labExam,
ispass=case
when writtenExam>=60 and labExam>=60 then 1
else 0
end
into newTable
from stuInfo left join stuScore on stuInfo.stuNo=stuScore.stuNo
select * from newTable
go

use student
select stuName as ‘姓名’,stuNo as ‘学号’,
‘笔试成绩’=case

           when writtenExam is null then '缺考'  
           else convert(varchar(4),writtenExam)--注意转型  
       end  

,’机试成绩’=case

           when labExam is null then '缺考'  
           else convert(varchar(4),labExam)  
       end  

,’是否通过’=case
when ispass=1 then ‘是’
else ‘否’
end
from newTable
go

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQL中间表使用

相关文章

  • 2017-05-11SQL Server 2005恢复数据库详细图文教程
  • 2017-05-11Win2008中SqlServer2008 无法打开错误日志文件导致无法启动的解决方法
  • 2017-05-11sql2005 日志清理 SQL2005压缩清除日志的方法
  • 2017-05-11SQL2005 ROW_NUMER实现分页的两种常用方式
  • 2017-05-11sql2005 远程连接问题解决方法
  • 2017-05-11安装SQL2005 29506错误码的解决方案
  • 2017-05-11使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
  • 2017-05-11sql2005 根据指定字段排序编号
  • 2017-05-11SQLServer2005与SQLServer2008数据库同步图文教程
  • 2017-05-11SQL Server 2008怎样添加自增列实现自增序号

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 解析SQL2005中如何使用CLR函数获取行号
    • SQL Server 2008中SQL之WaitFor使用介绍
    • sql server2005实现数据库读写分离介绍
    • SQLServer 2005系统配置要求官方说明
    • SQL2005重新生成索引的的存储过程 sp_rebuild_index 原创
    • SQL server 表操作介绍
    • sqlserver2008安装报语言不符的解决方法
    • SQL2005 provider: 命名管道提供程序 error: 40 无法打开到 SQL Server 的连接
    • 深入浅出数据库索引原理
    • SQL Server 2008存储结构之GAM、SGAM介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有