sqlserver2008r2的'like'查询问题

梦在别离时 2018-11-20 11:10:12
原语句:
where [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2017%'

怎样一次性查询出来包括
结平日期在2016和2017年
包括
‘’术后镇痛,
腰大池持续引流,
移动层流消毒床位费,
抗精神病药物治疗监测,
工娱治疗,
悬浮床治疗‘’
所有项目的数据用sql语句查询出来
...全文
470 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41594604 2018-11-28
  • 打赏
  • 举报
回复
不理解你为什么写的那么负责,有几个很简单为什么不用
梦在别离时 2018-11-20
  • 打赏
  • 举报
回复
这是自己写的语句: SELECT [病人姓名] ,[入院日期] ,A.[出院日期] ,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数 ,C.[项目名称] ,SUM([已结算次数]) 结算次数 ,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数 ,A.[结平日期] FROM [威海中心医院HRIP].[dbo].[病人住院信息表_Pati_In_Visit] a left join [威海中心医院HRIP].[dbo].[住院记帐项目_Pati_In_Bill_Item] b on a.住院流水号=b.[住院流水号] left join [威海中心医院HRIP].[dbo].[项目定义表_Dict_Item] C ON B.项目编码=C.项目编码 LEFT JOIN [威海中心医院HRIP].[dbo].[项目收费属性定义表_Dict_Item_Charge] D ON C.项目编码=D.项目编码 where [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2017%' or [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2016%' or [项目名称] like '%持续低流量吸氧%' and A.[结平日期] like '%2017%' or [项目名称] like '%持续低流量吸氧%' and A.[结平日期] like '%2016%' or [项目名称] like '%降温费%' and A.[结平日期] like '%2017%' or [项目名称] like '%降温费%' and A.[结平日期] like '%2016%' or [项目名称] like '%取暖费%' and A.[结平日期] like '%2017%' or [项目名称] like '%取暖费%' and A.[结平日期] like '%2016%' or [项目名称] like '%床位%' and A.[结平日期] like '%2017%' or [项目名称] like '%床位%' and A.[结平日期] like '%2016%' group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期] having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数]) 期望的查询结果要这样的: 病人姓名 入院日期 出院日期 住院天数 项目名称 结算次数 多结算次数 结平日期 姓名1 2017-11-01 05:56:01.000 2017-11-02 2 床位费(30) 3 1 2017-11-03 09:20:47.000 姓名5 2017-08-18 04:34:06.000 2017-08-21 4 婴儿床位费 5 1 2017-08-31 15:08:06.000 姓名4 2016-11-12 11:00:21.000 2016-11-18 7 外科床位费(40) 10 3 2016-12-10 07:57:09.000 姓名3 2016-09-08 14:20:28.000 2016-09-14 7 外科床位费(40) 8 1 2016-09-15 15:05:04.000 姓名2 2016-10-27 17:03:01.000 2016-11-02 7 外科床位费(40) 18 11 2016-11-30 07:50:49.000 想问一下这样的写法对吗
二月十六 2018-11-20
  • 打赏
  • 举报
回复
引用 6 楼 梦在别离时 的回复:
这个是原语句,但是其中结算日期包括2016和2017,项目名称包含很多 SELECT [病人姓名] ,[入院日期] ,A.[出院日期] ,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数 ,C.[项目名称] ,SUM([已结算次数]) 结算次数 ,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数 ,A.[结平日期] FROM [医院HRIP].[dbo].[病人住院信息表] a left join [医院HRIP].[dbo].[住院记帐项目] b on a.住院流水号=b.[住院流水号] left join [医院HRIP].[dbo].[项目定义表] C ON B.项目编码=C.项目编码 LEFT JOIN [医院HRIP].[dbo].[项目收费属性定义表] D ON C.项目编码=D.项目编码 where [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2017%' group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期] having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数])
给这个语句是什么意思,想把这个语句的结果再做筛选?还是想改这个语句?楼主最好能给出原始数据和对应想要的结果,直接写不完事了么
二月十六 2018-11-20
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([姓名] nvarchar(23),[结算日期] DATE,[项目名称] nvarchar(27))
Insert #T
select N'姓名1',N'2017-07-17',N'持续高流量吸氧' union all
select N'姓名2',N'2016-10-23',N'床位' union all
select N'姓名3',N'2017-07-26',N'持续高流' union all
select N'姓名4',N'2017-07-15',N'持续高流量吸氧' union all
select N'姓名5',N'2016-10-24',N'悬浮床' union all
select N'姓名6',N'2016-07-26',N'低流量吸氧' union all
select N'姓名7',N'2017-07-17',N'持续高流' union all
select N'姓名8',N'2016-10-23',N'工娱治疗' union all
select N'姓名9',N'2017-07-29',N'持续高流量吸氧' union all
select N'姓名9',N'2019-07-29',N'工娱治疗'
Go
--测试数据结束
Select * from #T WHERE
YEAR([结算日期])
BETWEEN 2016 AND 2017
AND [项目名称] IN (
'术后镇痛', '腰大池持续引流', '移动层流消毒床位费', '抗精神病药物治疗监测', '工娱治疗', '悬浮床治疗' --这些是想包含的项目
);


梦在别离时 2018-11-20
  • 打赏
  • 举报
回复
这个是原语句,但是其中结算日期包括2016和2017,项目名称包含很多 SELECT [病人姓名] ,[入院日期] ,A.[出院日期] ,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数 ,C.[项目名称] ,SUM([已结算次数]) 结算次数 ,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数 ,A.[结平日期] FROM [医院HRIP].[dbo].[病人住院信息表] a left join [医院HRIP].[dbo].[住院记帐项目] b on a.住院流水号=b.[住院流水号] left join [医院HRIP].[dbo].[项目定义表] C ON B.项目编码=C.项目编码 LEFT JOIN [医院HRIP].[dbo].[项目收费属性定义表] D ON C.项目编码=D.项目编码 where [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2017%' group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期] having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数])
吉普赛的歌 2018-11-20
  • 打赏
  • 举报
回复
;WITH cte AS (
SELECT N'术后镇痛' AS item
UNION ALL SELECT N'腰大池持续引流'
UNION ALL SELECT N'移动层流消毒床位费'
UNION ALL SELECT N'抗精神病药物治疗监测'
UNION ALL SELECT N'工娱治疗'
UNION ALL SELECT N'悬浮床治疗'
)
SELECT * FROM t INNER JOIN cte 
	ON  t.[项目名称] like '%'+cte.item+'%' and 
	(A.[结算日期] like '2016%' OR A.[结算日期] like '2017%')

梦在别离时 2018-11-20
  • 打赏
  • 举报
回复
这个是需要查询出来的结果样式 姓名 结算日期 项目名称 姓名1 2017-07-17 持续高流量吸氧 姓名2 2016-10-23 床位 姓名3 2017-07-26 持续高流 姓名4 2017-07-15 持续高流量吸氧 姓名5 2016-10-24 悬浮床 姓名6 2016-07-26 低流量吸氧 姓名7 2017-07-171 持续高流 姓名8 2016-10-23 工娱治疗 姓名9 2017-07-29 持续高流量吸氧 其中结算日期包括2016和2017年度,项目名称包含多种项目 请问这种怎么查询出来
吉普赛的歌 2018-11-20
  • 打赏
  • 举报
回复
;WITH cte AS (
SELECT N'术后镇痛' AS item
UNION ALL SELECT N'腰大池持续引流'
UNION ALL SELECT N'移动层流消毒床位费'
UNION ALL SELECT N'抗精神病药物治疗监测'
UNION ALL SELECT N'工娱治疗'
UNION ALL SELECT N'悬浮床治疗'
)
SELECT * FROM t INNER JOIN cte 
	ON  t.[项目名称] like '%'+cte.item+'%' and A.[结平日期] like '%2017%'
二月十六 2018-11-20
  • 打赏
  • 举报
回复
按照目前理解楼主可以试试这样:
SELECT
*
FROM

WHERE
YEAR([结平日期])
BETWEEN 2016 AND 2017
AND [项目名称] IN (
'术后镇痛', '腰大池持续引流', '移动层流消毒床位费', '抗精神病药物治疗监测', '工娱治疗', '悬浮床治疗'
);

二月十六 2018-11-20
  • 打赏
  • 举报
回复
楼主这个描述的不太清楚,最好给出表结构、测试数据和对应的结果,这样可以更加准确的写出语句
吉普赛的歌 2018-11-20
  • 打赏
  • 举报
回复
A.[结平日期]
是 字符串类型 nvarchar, varchar
还是 日期类型 datetime, date
?
二月十六 2018-11-20
  • 打赏
  • 举报
回复
SELECT * FROM (SELECT [病人姓名]
,[入院日期]
,A.[出院日期]
,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数
,C.[项目名称]
,SUM([已结算次数]) 结算次数
,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数
,[零售价]* (SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算金额
,A.[结平日期]
FROM [医院HRIP].[dbo].[病人住院信息表_Pati_In_Visit] a
left join [医院HRIP].[dbo].[住院记帐项目_Pati_In_Bill_Item] b
on a.住院流水号=b.[住院流水号]
left join [医院HRIP].[dbo].[项目定义表_Dict_Item] C
ON B.项目编码=C.项目编码
LEFT JOIN [威海中心医院HRIP].[dbo].[项目收费属性定义表_Dict_Item_Charge] D
ON C.项目编码=D.项目编码
where [项目包装单位] like '%天%' or [项目包装单位] like '%日%'
group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期]
having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数]))t
WHERE YEAR(结平日期) BETWEEN 2016 AND 2017
梦在别离时 2018-11-20
  • 打赏
  • 举报
回复
这个是自己写的语句: SELECT [病人姓名] ,[入院日期] ,A.[出院日期] ,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数 ,C.[项目名称] ,SUM([已结算次数]) 结算次数 ,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数 ,[零售价]* (SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算金额 ,A.[结平日期] FROM [医院HRIP].[dbo].[病人住院信息表_Pati_In_Visit] a left join [医院HRIP].[dbo].[住院记帐项目_Pati_In_Bill_Item] b on a.住院流水号=b.[住院流水号] left join [医院HRIP].[dbo].[项目定义表_Dict_Item] C ON B.项目编码=C.项目编码 LEFT JOIN [威海中心医院HRIP].[dbo].[项目收费属性定义表_Dict_Item_Charge] D ON C.项目编码=D.项目编码 where [项目包装单位] like '%天%' or [项目包装单位] like '%日%' group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期] having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数]) ------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------ 这是查询出来的其中一列的结果 结平日期 2014-08-25 14:50:20.000 2017-09-10 14:41:12.000 2016-12-10 07:57:09.000 2016-12-08 07:26:04.000 2018-05-16 09:28:39.000 2018-01-02 15:29:11.000 2018-08-18 09:36:53.000 2015-01-19 10:31:35.000 ------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------ 请问在哪里添加什么样的语句之后可以筛选其中结平日期只有其中16-17年的数据
二月十六 2018-11-20
  • 打赏
  • 举报
回复
引用 9 楼 weixin_42300929 的回复:
这是自己写的语句:
SELECT [病人姓名]
,[入院日期]
,A.[出院日期]
,DATEDIFF(DAY,[入院日期],A.[出院日期])+1 住院天数
,C.[项目名称]
,SUM([已结算次数]) 结算次数
,(SUM([已结算次数]))-(DATEDIFF(DAY,[入院日期],A.[出院日期])+1) 多结算次数
,A.[结平日期]
FROM [威海中心医院HRIP].[dbo].[病人住院信息表_Pati_In_Visit] a
left join [威海中心医院HRIP].[dbo].[住院记帐项目_Pati_In_Bill_Item] b
on a.住院流水号=b.[住院流水号]
left join [威海中心医院HRIP].[dbo].[项目定义表_Dict_Item] C
ON B.项目编码=C.项目编码
LEFT JOIN [威海中心医院HRIP].[dbo].[项目收费属性定义表_Dict_Item_Charge] D
ON C.项目编码=D.项目编码
where [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2017%'
or [项目名称] like '%持续高流量吸氧%' and A.[结平日期] like '%2016%'
or [项目名称] like '%持续低流量吸氧%' and A.[结平日期] like '%2017%'
or [项目名称] like '%持续低流量吸氧%' and A.[结平日期] like '%2016%'
or [项目名称] like '%降温费%' and A.[结平日期] like '%2017%'
or [项目名称] like '%降温费%' and A.[结平日期] like '%2016%'
or [项目名称] like '%取暖费%' and A.[结平日期] like '%2017%'
or [项目名称] like '%取暖费%' and A.[结平日期] like '%2016%'
or [项目名称] like '%床位%' and A.[结平日期] like '%2017%'
or [项目名称] like '%床位%' and A.[结平日期] like '%2016%'
group by [病人姓名],[入院日期],A.[出院日期] ,C.[项目名称],D.[零售价],A.[结平日期]
having (DATEDIFF(DAY,[入院日期],A.[出院日期])+1)<SUM([已结算次数])
期望的查询结果要这样的:
病人姓名 入院日期 出院日期 住院天数 项目名称 结算次数 多结算次数 结平日期
姓名1 2017-11-01 05:56:01.000 2017-11-02 2 床位费(30) 3 1 2017-11-03 09:20:47.000
姓名5 2017-08-18 04:34:06.000 2017-08-21 4 婴儿床位费 5 1 2017-08-31 15:08:06.000
姓名4 2016-11-12 11:00:21.000 2016-11-18 7 外科床位费(40) 10 3 2016-12-10 07:57:09.000
姓名3 2016-09-08 14:20:28.000 2016-09-14 7 外科床位费(40) 8 1 2016-09-15 15:05:04.000
姓名2 2016-10-27 17:03:01.000 2016-11-02 7 外科床位费(40) 18 11 2016-11-30 07:50:49.000
想问一下这样的写法对吗

where条件不用写这么麻烦
YEAR([结算日期])
BETWEEN 2016 AND 2017
AND [项目名称] IN (
'术后镇痛', '腰大池持续引流', '移动层流消毒床位费', '抗精神病药物治疗监测', '工娱治疗', '悬浮床治疗' --这些名称不是模糊查询,如果想模糊查询,就用like 那种
);

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧