1. USE [clab]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[sp_bd_getResultByEcd] Script Date: 08/06/2014 16:47:55 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. -- =============================================
  9. -- Author: zhangcy
  10. -- Create date: 2014-07-09
  11. -- Description: 传入病人ID及项目代码获取项目最新的检验结果
  12. -- =============================================
  13. CREATE PROCEDURE [dbo].[sp_bd_getResultByEcd]
  14. (
  15. @pat_in_no varchar(50) --病人id
  16. ,@itm_id_list varchar(500) --项目编码字符串,各项目编码以,进行分割
  17. )
  18. AS
  19.  
  20. Declare @NeedParse varchar(500) --参数 没有处理的字符串
  21.  
  22. if (CharIndex(',', @itm_id_list)=0)
  23. BEGIN
  24. SELECT
  25. a.res_itm_id as 项目id
  26. ,a.res_id as 报告id
  27. ,a.res_itm_ecd as 项目代码
  28. ,a.res_chr as 结果
  29. ,a.res_date as 检测时间
  30. ,a.value as 提示
  31. from
  32. (SELECT row_number() over (partition by res_itm_id order by res_date DESC) as rownum
  33. ,pat_in_no
  34. ,res_id
  35. ,res_itm_id
  36. ,res_itm_ecd
  37. ,res_chr
  38. ,res_date
  39. ,value
  40. from patients with(nolock)
  41. left join resulto with(nolock) on patients.pat_id=resulto.res_id
  42. left join dict_res_ref_flag on dict_res_ref_flag.id = resulto.res_ref_flag
  43. where pat_in_no=@pat_in_no
  44. and pat_flag in (2,4)
  45. and res_itm_id=@itm_id_list) as a
  46. where a.rownum=1
  47. END
  48. else
  49. BEGIN
  50. set @NeedParse =@itm_id_list
  51. while (charIndex(',', @NeedParse)>0)
  52. begin
  53. SELECT
  54. a.res_itm_id as 项目id
  55. ,a.res_id as 报告id
  56. ,a.res_itm_ecd as 项目代码
  57. ,a.res_chr as 结果
  58. ,a.res_date as 检测时间
  59. ,a.value as 提示
  60. from
  61. (SELECT row_number() over (partition by res_itm_id order by res_date DESC) as rownum
  62. ,pat_in_no
  63. ,res_id
  64. ,res_itm_id
  65. ,res_itm_ecd
  66. ,res_chr
  67. ,res_date
  68. ,value
  69. from patients with(nolock)
  70. left join resulto with(nolock) on patients.pat_id=resulto.res_id
  71. left join dict_res_ref_flag on dict_res_ref_flag.id = resulto.res_ref_flag
  72. where pat_in_no=@pat_in_no
  73. and pat_flag in (2,4)
  74. and res_itm_id=SubString(@NeedParse,1,CharIndex(',',@NeedParse)-1)) as a
  75. where a.rownum=1
  76.  
  77. set @NeedParse =SubString(@NeedParse,CharIndex(',', @NeedParse)+1,len(@NeedParse)-CharIndex(',', @NeedParse))
  78. end
  79.  
  80. SELECT
  81. a.res_itm_id as 项目id
  82. ,a.res_id as 报告id
  83. ,a.res_itm_ecd as 项目代码
  84. ,a.res_chr as 结果
  85. ,a.res_date as 检测时间
  86. ,a.value as 提示
  87. from
  88. (SELECT row_number() over (partition by res_itm_id order by res_date DESC) as rownum
  89. ,pat_in_no
  90. ,res_id
  91. ,res_itm_id
  92. ,res_itm_ecd
  93. ,res_chr
  94. ,res_date
  95. ,value
  96. from patients with(nolock)
  97. left join resulto with(nolock) on patients.pat_id=resulto.res_id
  98. left join dict_res_ref_flag on dict_res_ref_flag.id = resulto.res_ref_flag
  99. where pat_in_no=@pat_in_no
  100. and pat_flag in (2,4)
  101. and res_itm_id=@NeedParse) as a
  102. where a.rownum=1
  103.  
  104. END
  105. GO

此存储过程为:传入病人ID,项目编码集,其中各编码以逗号分割。

存储过程里面要做的就是循环读取项目编码集里面的单个编码,及结合病人ID获取该病人及该项目的检验结果

sql 存储过程 循环使用的更多相关文章

  1. sql存储过程循环实现事务

    //往一张表中添加数据,获取添加数据生成的ID,再往另一张表中添加多条数据 ALTER PROCEDURE [dbo].[AttendanceCardAndDetail_Add] @SchoolID ...

  2. SQL存储过程+游标 循环批量()操作数据

    本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...

  3. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  4. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  5. SQL 存储过程(学生,课程表,选修表)

    SQL 存储过程(学生,课程表,选修表) 一.存储过程的分类 在SQL Server中存储过程分过两类: 1)系统存储过程("sp_"作为前缀) 2)用户自定义存储过程 二.创建和 ...

  6. MySQL 存储过程循环

    MySQL  存储过程循环 MySQL循环语句(包括WHILE,REPEAT和LOOP)来根据条件反复运行代码块. MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块. MySQL中有三个 ...

  7. 《软件测试自动化之道》读书笔记 之 SQL 存储过程测试

    <软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序   创建测试用例以及测试结果存储  执行T-SQL脚本  使用BCP工具导入测试用例数据  ...

  8. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  9. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

随机推荐

  1. oracle 11g rac 修改字符集

    系统版本: Oracle Linux Server release 5.7 数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.3 ...

  2. Object.keys()

    Object.keys(obj),返回一个数组,数组里是该obj可被枚举的所有属性名.请看示例: 示例一: function Pasta(grain, width, shape) { this.gra ...

  3. 怎样在cmd(命令提示符)下进行复制粘贴操作

    如右图,右键命令提示符窗口的标题栏,选择属性.     选择“编辑选项”里的“快速编辑模式”,并确定之:   在弹出的应用选择提示框上选择“保存属性,供以后具有相同标题的窗口使用”:   如此你就可以 ...

  4. How to avoid C# console applications from closing automatically.

    One way is to interop it with msvcrt.dll You can pinvoke this C function into your C# application. T ...

  5. Javascript核心概述 - 深入了解javascript

    /* 一.执行上下文:堆栈(底部全局上下文+顶部当前活动上下文) */ /* 二.变量对象: 变量根据执行上下文,找到数据存储位置,这种机制叫变量对象 1. 变量都要var定义,且都不能delete ...

  6. 2186: [Sdoi2008]沙拉公主的困惑 - BZOJ

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  7. BZOJ 4031: [HEOI2015]小Z的房间 Matrix-Tree定理

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 题解: Matrix-tree定理解决生成树计数问题,其中用到高斯消元法求上三角矩 ...

  8. 【BZOJ】【1927】【SDOI2010】星际竞速

    网络流/费用流 比较简单的一题,对于每个星球,将它拆成两个点,然后二分图建模:左部结点与S相连,流量为1费用为0:右部结点与T相连,流量为1费用为0:对于每条航道x->y,连边x->y+n ...

  9. poj 1797 Heavy Transportation(最短路变种2,连通图的最小边)

    题目 改动见下,请自行画图理解 具体细节也请看下面的代码: 这个花了300多ms #define _CRT_SECURE_NO_WARNINGS #include<string.h> #i ...

  10. DJANGO问题--Error: ‘ManyRelatedManager’ object is not iterable

    http://www.itblah.com/django-error-manyrelatedmanager-object-iterable/ Django: Error: ‘ManyRelatedMa ...