Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 标识字符串多次出现的记录_Sql_Sql Server - Fatal编程技术网

Sql 标识字符串多次出现的记录

Sql 标识字符串多次出现的记录,sql,sql-server,Sql,Sql Server,我的数据集如下所示: ID Medication Dose 1 Aspirin 4 1 Tylenol 7 1 Aspirin 2 1 Ibuprofen 1 2 Aspirin 6 2 Aspirin 2 2 Ibuprofen 6 2

我的数据集如下所示:

 ID    Medication         Dose
 1          Aspirin        4
 1          Tylenol        7
 1          Aspirin        2   
 1          Ibuprofen      1
 2          Aspirin        6
 2          Aspirin        2
 2          Ibuprofen      6
 2          Tylenol        4
 3          Tylenol        3
 3          Tylenol        7
 3          Tylenol        2
我想开发一个代码来识别多次服用药物的患者。例如,ID 1服用阿司匹林两次,ID 2服用阿司匹林两次,ID 3服用泰诺三次

我可能错了,但我认为最简单的方法是使用类似于下面代码的代码根据药物将每个ID连接起来;但我不太确定接下来该怎么办——如果一个字符串在一个单元格中出现两次,是否可以计数

 SELECT DISTINCT ST2.[ID],
     SUBSTRING(
         (
             SELECT ','+ST1.Medication AS [text()]
             FROM ED_NOTES_MASTER ST1
             WHERE ST1.[ID] = ST2.[ID] 
              Order BY [ID] 
        FOR XML PATH ('')
         ), 1, 200000) [Result]
    FROM ED_NOTES_MASTER  ST2
我希望输出如下所示:

 ID MEDICATION                    Aspirin2x   Tylenol2x     Ibuprofen2x  
 1  Aspirin, Tylenol , Aspirin         YES       NO             NO
 2  Ibuprofen, Aspirin, Aspirin        YES       NO             NO           
 3  Tylenol, Tylenol ,Tylenol          NO        YES            NO

对于问题的第一部分(识别多次服用特定药物的患者),您可以使用GROUP BY to GROUP BY ID和药物进行此操作,然后使用COUNT获得每个患者每次服用药物的次数。例如:

SELECT ID, Medication, COUNT(*) AS amount
FROM ST2
GROUP BY ID, Medication
这将为您提供表中显示的所有ID药物组合的列表,以及每个组合出现的次数计数。要将这些结果限制为大于2的结果,可以使用have向COUNTed字段添加一个条件:

SELECT ID, Medication, COUNT(*) AS amount
FROM ST2
GROUP BY ID, Medication
HAVING amount >= 2
现在的问题是以您想要的方式格式化结果。从上面的查询中,您将得到表中多次出现的所有患者-药物组合的列表,如下所示:

ID    |   Medication  | Count
------+---------------+-------
1     | Aspirin       | 2
2     | Aspirin       | 2
3     | Tylenol       | 3

如果可能的话,我建议您尝试使用这种格式,因为正如您所发现的那样,要获得以逗号分隔的列表中返回的多个值,就像您在药物专栏中所做的那样,您必须借助一些技巧才能使其起作用(尽管SQL Server的最新版本确实实现了某种适当的组连接功能。)。如果您确实需要Aspirin2x等列,

您使用的是什么版本的SQL Server?您在这里遇到了困难,因为关系数据不是这样工作的。您需要在这里使用动态SQL来生成这些列。然后,您需要使用聚合来计算每个字符串,然后再将它们合并到一个元组中。搜索此项“动态轴心”网站。关于如何生成列,有几十个示例。从这里开始,计算值的附加聚合并不困难。@TimBiegeleisen 2012虽然这可能会有帮助,但它不会生成OP所期望的输出。检查内容-字符串格式,以防万一。这解决了问题的第一部分OP的问题(识别重复的患者-医学组合)。对于第二部分(如何显示结果),我认为OP应该在客户端处理,而不是直接在SQL中处理。