从单个数据点解析数据(代码片段)

author author     2022-12-27     289

关键词:

我有一个讨厌的数据集:

+----+------------------------------------------------------------------------------+
| PK |                                 Medications                                  |
+----+------------------------------------------------------------------------------+
|  1 | NAPROXEN, neurontin, DOCUSATE, HYDROCODONE, BACLOFEN, advil                  |
|  2 | celexa, lortab, lyrica, ambien, xanax                                        |
|  3 | adipex                                                                       |
|  4 | opana, roxicodone                                                            |
|  5 | adderall                                                                     |
|  6 | hydrocodone/apap                                                             |
|  7 | NEXIUM, METOPROLOL, lipitor, VERAPAMIL, ASPIRIN, WARFARIN, ambien            |
|  8 | prozac                                                                       |
|  9 | flexeril                                                                     |
| 10 | soma, LITHIUM, MULTI-VITAMIN, fentanyl patch, percocet, PROPANOLOL, tegretol |
+----+------------------------------------------------------------------------------+

请记住,这只是2列。

我想要返回的只是整个数据集中不同medications的1列列表:

NAPROXEN
 neurontin
 DOCUSATE
 HYDROCODONE
 BACLOFEN
 advil
celexa
 lortab
 lyrica
 ambien
 xanax
adipex
opana

最好的方法是什么?

非常感谢你的指导。

答案
DECLARE @Medications TABLE
(
     PK BIGINT PRIMARY KEY IDENTITY(1,1)
    ,Medications NVARCHAR(4000)
)

/* Populate the table with example records*/
INSERT INTO @Medications(Medications) 
VALUES ('NAPROXEN, neurontin, DOCUSATE, HYDROCODONE, BACLOFEN, advil')
      ,('celexa, lortab, lyrica, ambien, xanax   ')
      ,('adipex')
      ,('opana roxicodone')
      ,('adderall')
      ,('hydrocodone/apap')
      ,('NEXIUM,METOPROLOL,lipitor,VERAPAMIL,ASPIRIN,WARFARIN,ambien')
      ,('prozac')
      ,('flexeril')
      ,('soma,LITHIUM,MULTI-VITAMIN,fentanyl patch,percocet,PROPANOLOL,tegretol');

选项1

select distinct Medication = ltrim(rtrim(O.splitdata ))
from
(
select *,
cast('<X>'+replace(F.Medications,',','</X><X>')+'</X>' as XML) as xmlfilter
from @Medications F
)F1
cross apply
( 
 select fdata.D.value('.','varchar(50)') as splitdata 
 from f1.xmlfilter.nodes('X') as fdata(D)) O
where O.splitdata <> ''
group by O.splitdata

选项2

SELECT DISTINCT display_term
FROM @Medications
CROSS APPLY sys.dm_fts_parser('"' + Medications + '"', 1033, 0,0)
where display_term NOT LIKE 'nn%'

选项3

SELECT  DISTINCT
    LTRIM(RTRIM(SUBSTRING(Medications, Number ,CHARINDEX(',', Medications + ',', Number ) - Number))) AS Medication 
FROM @Medications 
JOIN master..spt_values ON Number <= DATALENGTH(Medications) + 1  AND type='P'
AND SUBSTRING(',' + Medications, Number , 1) = ','  
另一答案

这可能是您正在寻找的解决方案:

;WITH SourceDate(PK,MedicationsXML) AS
(
    SELECT PK
          ,CAST(N'<r><![CDATA[' + REPLACE(Medications, ',', ']]></r><r><![CDATA[') + ']]></r>' AS XML)
    FROM @Medications
)
SELECT DISTINCT Medicament
FROM SourceDate
CROSS APPLY (SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)'))) AS Medicament FROM MedicationsXML.nodes('//r') Tbl(Col)) AS List

这是完整的工作示例(我添加了重复的记录,以表明它只返回不同的值:

SET NOCOUNT ON
GO

    /* Declare table that holds the data*/
    DECLARE @Medications TABLE
    (
         PK BIGINT PRIMARY KEY IDENTITY(1,1)
        ,Medications NVARCHAR(4000)
    )

    /* Populate the table with exmaple records*/
    INSERT INTO @Medications(Medications)
    VALUES ('NAPROXEN, neurontin, DOCUSATE, HYDROCODONE, BACLOFEN, advil')
          ,('celexa, lortab, lyrica, ambien, xanax   ')
          ,('adipex')
          ,('opana, roxicodone')
          ,('adderall')
          ,('hydrocodone/apap')
          ,('NEXIUM, METOPROLOL, lipitor, VERAPAMIL, ASPIRIN, WARFARIN, ambien')
          ,('prozac')
          ,('flexeril')
          ,('soma, LITHIUM, MULTI-VITAMIN, fentanyl patch, percocet, PROPANOLOL, tegretol')
          ,('NAPROXEN, neurontin, DOCUSATE, HYDROCODONE, BACLOFEN, advil')
          ,('celexa, lortab, lyrica, ambien, xanax   ')
          ,('adipex')
          ,('opana, roxicodone')
          ,('adderall')
          ,('hydrocodone/apap')
          ,('NEXIUM, METOPROLOL, lipitor, VERAPAMIL, ASPIRIN, WARFARIN, ambien')
          ,('prozac')
          ,('flexeril')
          ,('soma, LITHIUM, MULTI-VITAMIN, fentanyl patch, percocet, PROPANOLOL, tegretol')

    ;WITH SourceDate(PK,MedicationsXML) AS
    (
        SELECT PK
              ,CAST(N'<r><![CDATA[' + REPLACE(Medications, ',', ']]></r><r><![CDATA[') + ']]></r>' AS XML)
        FROM @Medications
    )
    SELECT DISTINCT Medicament
    FROM SourceDate
    CROSS APPLY (SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)'))) AS Medicament FROM MedicationsXML.nodes('//r') Tbl(Col)) AS List


SET NOCOUNT OFF
GO

随意问任何问题。

另一答案

如果你可以输出到awk

outputcommand | awk 'BEGINFS="|"print $3'|awk 'BEGINRS=","print $0'

如果它是一个简单的文本文件,您可以使用cat filename作为outputcommand或:

awk 'BEGINFS="|"print $3' some_filename |awk 'BEGINRS=","print $0'

php从数据库中查看单个项目(代码片段)

查看详情

php从数据库中获取单个值(代码片段)

查看详情

sql如何从单个用户中获取数据库(代码片段)

查看详情

如何在单个查询中从多个数据库中检索数据?(代码片段)

...我有多个具有相同表和列的数据库,我如何使用Java中的单个查询从这些数据库中检索数据。为单个数据库做了这个,我是java的新手,请建议。publicclassMultipleDBTestpublicvoiddbConnect(Stringdb_connect_string,Stringdb_userid,Stringdb_password)tryClass.... 查看详情

oracle数据库从rman备份集片段还原指定单个归档日志进行日志挖掘分析(代码片段)

起因:业务已知在之前某个时间点范围内发生了可疑异常操作,希望通过日志挖掘来审查SQL动作现状:生产库在线归档已备份后删除,RMAN归档备份已经刷出超期的备份集文件需求:通过RMAN还原归档到线上以进行日志挖掘 定... 查看详情

从 Excel 数据模型/Power Query 查询单个数据点(获取和转换数据)

】从Excel数据模型/PowerQuery查询单个数据点(获取和转换数据)【英文标题】:QueryingsingledatapointsfromtheExcelDataModel/PowerQuery(Get&TransformData)【发布时间】:2016-12-1512:14:12【问题描述】:我正在使用最新版本的Excel2016(通过O365E3许... 查看详情

数据结构与算法之深入解析“检测正方形”的求解思路与算法示例(代码片段)

一、题目要求给你一个在X-Y平面上的点构成的数据流。设计一个满足下述要求的算法:添加一个在数据流中的新点到某个数据结构中,可以添加重复的点,并会视作不同的点进行处理;给你一个查询点,请你从数据结构中选出三... 查看详情

sh从pg_dumpall存档中提取单个数据库(代码片段)

查看详情

android源码解析sharepreference从使用到原理分析(代码片段)

...访问。为什么这么说呢?因为SharedPreferences的实现是基于单个xml文件实现的,并且,所有持久化数据都是一次性加载到内存,如果数据过大,是不合适采用SharedPreferences存放的。而适用的场景是单进程的原因同样如此,由于Android... 查看详情

11.06针对“单个测试点包含多组数据”的解决(代码片段)

while(~scanf("%d%d",&n,&m))等效于while(scanf("%d%d",&n,&m)!=EOF)~是按位取反scanf的返回值是输入值的个数如果没有输入值就是返回-1-1按位取反结果是0while(~scanf("%d",&n))就是当没有输入的时候退出循环 下面是例子题目描述求... 查看详情

python从netcdf文件中读取数据点。(代码片段)

查看详情

用ggrepel标记单个点(代码片段)

我正在尝试使用geom_label_repel向图上的几个数据点添加标签。在这种情况下,它们恰好在箱形图上是异常值。我已经完成了大部分代码的工作,可以标记离群值,但是由于某种原因,我将多个标签(等于整个数据集的样本量)映... 查看详情

是否可以在单个应用程序中配置多个解析客户端?(代码片段)

所以我有几个不同的解析服务器设置。一台服务器只是从漂亮的统一数据库中捕获各种应用程序的错误日志(我有很多)。所以我可能有一个特定的独立数据迁移工具,如果它遇到错误,会将异常写入这个Error_log解析表/类。没... 查看详情

与下位机或设备的通信解析优化的一点功能:t4+动态编译(代码片段)

...项目中,需要通过TCP与设备进行对接的,传的是Modbus协议的数据,然后后台需要可以动态配置协议解析的方式,即寄存器的解析方式,,配置信息有:Key,数据Index,源数据类型,数据库列类型,数据排列方式   一开始使... 查看详情

用pandas编写单个csv标头(代码片段)

我正在将数据解析为列表并使用pandas来构建和写入CSV文件。首先,我的数据被带入一个集合,其中inv,name和date都是包含大量条目的列表。然后我使用concat将每次迭代通过我解析的数据集连接到CSV文件,如下所示:counter=Truedata='I... 查看详情

从单个csv文件中读取两个完整的不同数据帧(代码片段)

基本上无法读取单个csv文件的所有内容。csv文件的前几行包含7列。文件的其余部分包含13列。我可以在不同的时间单独阅读它们,但我想知道是否有一种方法可以立刻阅读它们。一些csv文件的照片;(注意:你可以忽略为第一个... 查看详情

[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python(代码片段)

[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python(2)[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python_zhangphil的博客-CSDN... 查看详情

[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python(代码片段)

[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python(2)[时间维度]日志数据提取事件关键词,解析对应时间点计数,matplotlib绘制统计图,python_zhangphil的博客-CSDN... 查看详情