如何将每个visit_id记录的前4行值放入单独列的一行中?

克里斯西

我有一个patient_visit_codes带有以下字段表格:pat_id, visit_id, visit_date, visit_code, create_timestamp每个患者在每个访问日期可以有无限个访问代码。每个visit_code列在单独的行中。我只想将第一个visit_code创建的4个创建到单独的列中。

因此,如果我的表包含以下数据:

;WITH patient_visit_codes AS (
SELECT * FROM (VALUES
(1, 'B58B3850-43BB-434D-B1EA-B968A01332EA', '2015-12-22', '3018F', '2015-12-22 07:24:07.403'),
(1, 'B58B3850-43BB-434D-B1EA-B968A01332EA', '2015-12-22', '1101F', '2015-12-22 07:28:09.440'),
(56, '482A73F8-EA3F-4CD6-B1AD-BD2388EC5912', '2016-01-05', 'I50', '2016-01-05 11:05:34.830'),
(56, '482A73F8-EA3F-4CD6-B1AD-BD2388EC5912', '2016-01-05', 'R50.90', '2016-01-05 11:35:14.560'),
(56, '482A73F8-EA3F-4CD6-B1AD-BD2388EC5912', '2016-01-05', 'Z02.89', '2016-01-05 11:40:24.740')
) as t (pat_id, visit_id, visit_date, visit_code, create_timestamp))

我正在寻找如下结果:

pat_id  | visit_id                              | visit_code1   | visit_code2   | visit_code3   | visit_code4 
1       | B58B3850-43BB-434D-B1EA-B968A01332EA  | 3018F         | 1101F         | Null          | Null 
56      | 482A73F8-EA3F-4CD6-B1AD-BD2388EC5912  | I50           | R50.90        | Z02.89        | Null 
耶利哥

使用MS SQL 2012,我想到了以下内容,可以为您提供所需的输出。它涉及创建一个子查询/ CTE,以按日期对访问进行排名,然后进行4次自我联接,以将所有访问都置于单个行条目中:

WITH cte
AS
    (SELECT pat_ID, visit_ID, visit_date, visit_code, create_timestamp,
        RANK() OVER(PARTITION BY pat_ID ORDER BY visit_date, create_timestamp) AS RankNo
    FROM #t)

SELECT a.pat_id, a.visit_id, a.visit_code AS visit_code1, b.visit_code AS visit_code2, 
    c.visit_code AS visit_code3, d.visit_code AS visit_code4
FROM cte AS a
LEFT JOIN
    (SELECT * FROM cte AS b WHERE b.RankNo = 2) AS b
ON a.pat_ID = b.pat_ID
LEFT JOIN
    (SELECT * FROM cte AS c WHERE c.RankNo = 3) AS c
ON a.pat_id = c.pat_ID
LEFT JOIN
    (SELECT * FROM cte AS d WHERE d.RankNo = 4) AS d
ON a.pat_ID = d.pat_ID
WHERE
    a.RankNo = 1

对于RANK()函数,我对visit_date和create_timestamp都进行了ORDER BY以消除联系...如果有一个visit_date在创建的确切时间出现,您可能要添加第三个ORDER BY

这将提供所需的输出,但我还建议使用Googling SQL动态枢纽以查看替代解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将列表中的所有值放入同一行

如何将选定列的值存储在单独的行中?

如何将每隔一行移到R中的前一行?

如何将列中的某些值移动到同一行的不同列

如何将一列的每一行值转换为pandas中的列表?

如何将存储在列中的 JSON 数组中的每个元素的行拆分为一行?

Pandas DataFrame:如何根据标记的列值将一行转换为单独的行

如何将一行中的数据分为两个单独的列,并且该数据没有逗号?

如何将数据帧从第一行子集到列中的最大值?

如何将多个列中的多个值合并为一行?

如何将值复制到 PowerBI 中特定列的下一行?

如何将逗号分隔的字符串列中的每个值提取到单独的行中?

列公式依赖于前一行值并以 Python 中的单独列为条件

如何将实际的实际行与另一列熊猫的前一行求和?

如何将唯一行的pandas数据框列转换为单独的列标题,计数并求和相邻行的值?

如何将列中的列表/数组条目转换为一行,每个条目具有不同的列

如何将Pandas DataFrame中的值与上一行和上一列中的值进行比较?

如何将前一行的值与当前行的值相乘

如何将第一行的列值相乘添加到组中的所有其他行?

将字符串的每一行放入PHP中的单独变量中

Python-如何将一行的列值与下一行的值进行比较

如何将特定列中的数据放入一个唯一的行中?

如何将每个输入框条目写到Excel中的第一行中?

将多行的值合并为一行,每个值在其自己的列中

如何将单列的行连接到一行中最多4列?

如何将 JSON 文件中的值提取到数据帧行中的单独列中

如何将所有ID从数据库列放入一个单独的数组中?

Pandas:如何将日志文件包裹的行合并到前一行/行的最后一列?

如何将ListView中的每个项目限制为一行?