字符串的SQL透视
我在SQL 2017中有以下数据字符串的SQL透视,sql,Sql,我在SQL 2017中有以下数据 Number Description Value 37 Recorded 2019-11-06T10:51:25.482-05:00 37 ICD10Code Z32.00 37 ICD10Desc Encounter 37 Status Inactive 37 Recorded 2019-12-06T10:51:25.482-05:00 37 I
Number Description Value
37 Recorded 2019-11-06T10:51:25.482-05:00
37 ICD10Code Z32.00
37 ICD10Desc Encounter
37 Status Inactive
37 Recorded 2019-12-06T10:51:25.482-05:00
37 ICD10Code T11.00
37 ICD10Desc Test
37 Status Active
然而,我对sql中的pivot还不熟悉,我尝试了不同的方法,但没有取得我想要的结果。下面是我想要的数据,请有人帮助提供,以实现这一点
Number Recorded ICD10Code ICD10Desc Status
37 2019-11-06T10:51:25.482-05:00 Z32.00 Encounter Inactive
37 2019-12-06T10:51:25.482-05:00 T11.00 Test Active
我尝试了以下查询
select *
from
(
select patientnumber,description,value
from patient_Diagnosis
where (Description not like '%guid%' and description not like '%listorder%') and type != 0 and type =1 and description != 'statusdate'
and patientnumber = 946
) src
pivot
(
MIN(value)
FOR Description IN([Recorded],[ICD10COde],[ICD10Desc])
) piv;
你好,谢谢你的更新 我创建了一个名为#u tmp的临时表,并将这些截图中的所有数据加载到该表中 输入:
SELECT * FROM #_tmp
输出:
Number Description Value
946 Recorded 2019-07-11
946 ICD10Code F11.10
946 ICD10Desc Opioid abuse, uncomplicated
946 Status Resolved
946 Recorded 2019-05-02
946 ICD10Code F10.20
946 ICD10Desc Alcohol use disorder, Moderate
946 Status Resolved
Number Recorded ICD10Code ICD10Desc Status
946 2019-07-11 F11.10 Opioid abuse, uncomplicated Resolved
946 2019-05-02 F10.20 Alcohol use disorder, Moderate Resolved
Number Description Value rn
946 ICD10Code F10.20 1
946 ICD10Code F11.10 2
946 ICD10Desc Alcohol use disorder, Moderate 1
946 ICD10Desc Opioid abuse, uncomplicated 2
946 Recorded 2019-05-02 1
946 Recorded 2019-07-11 2
946 Status Resolved 1
946 Status Resolved 2
不管怎样,这是支点。它使用一个公共表表达式在每个描述和值上放置一个行号()
;WITH tmpCTE AS (
SELECT X.*
, ROW_NUMBER() OVER(PARTITION BY X.[Description] ORDER BY X.[Number], X.[Description], X.[Value]) as [rn]
FROM #_tmp as X
)
SELECT pvt.[Number], pvt.[Recorded], pvt.[ICD10Code], pvt.[ICD10Desc], pvt.[Status]
FROM (
SELECT T.[Number], T.[Description], T.[Value], T.[rn]
FROM tmpCTE AS T
) AS p
PIVOT (
-- You will have to know the distinct names of the values for the columns
-- In this case, it is all the unique items from the Description column
-- Since that is what we're pivoting.
MAX([Value]) FOR [Description] IN ([Recorded], [ICD10Code], [ICD10Desc], [Status])
) as pvt
GROUP BY pvt.[rn], pvt.[Number], pvt.[Recorded], pvt.[ICD10Code], pvt.[ICD10Desc], pvt.[Status]
ORDER BY pvt.[Number], pvt.[Recorded] DESC
输出:
Number Description Value
946 Recorded 2019-07-11
946 ICD10Code F11.10
946 ICD10Desc Opioid abuse, uncomplicated
946 Status Resolved
946 Recorded 2019-05-02
946 ICD10Code F10.20
946 ICD10Desc Alcohol use disorder, Moderate
946 Status Resolved
Number Recorded ICD10Code ICD10Desc Status
946 2019-07-11 F11.10 Opioid abuse, uncomplicated Resolved
946 2019-05-02 F10.20 Alcohol use disorder, Moderate Resolved
Number Description Value rn
946 ICD10Code F10.20 1
946 ICD10Code F11.10 2
946 ICD10Desc Alcohol use disorder, Moderate 1
946 ICD10Desc Opioid abuse, uncomplicated 2
946 Recorded 2019-05-02 1
946 Recorded 2019-07-11 2
946 Status Resolved 1
946 Status Resolved 2
请注意,如果我们只是运行CTE:
SELECT X.*
, ROW_NUMBER() OVER(PARTITION BY X.[Description] ORDER BY X.[Number], X.[Description], X.[Value]) as [rn]
FROM #_tmp as X
我们得到以下结果。您可以看到交替的rn
值,以指示旋转时的分组。这有助于使我们的产出保持有序
输出:
Number Description Value
946 Recorded 2019-07-11
946 ICD10Code F11.10
946 ICD10Desc Opioid abuse, uncomplicated
946 Status Resolved
946 Recorded 2019-05-02
946 ICD10Code F10.20
946 ICD10Desc Alcohol use disorder, Moderate
946 Status Resolved
Number Recorded ICD10Code ICD10Desc Status
946 2019-07-11 F11.10 Opioid abuse, uncomplicated Resolved
946 2019-05-02 F10.20 Alcohol use disorder, Moderate Resolved
Number Description Value rn
946 ICD10Code F10.20 1
946 ICD10Code F11.10 2
946 ICD10Desc Alcohol use disorder, Moderate 1
946 ICD10Desc Opioid abuse, uncomplicated 2
946 Recorded 2019-05-02 1
946 Recorded 2019-07-11 2
946 Status Resolved 1
946 Status Resolved 2
请以文本形式发布数据,而不是图像。这使问题更容易阅读,也更容易回答,因为数据可以被剪切和粘贴成一把小提琴?表名是什么?在提问时提供尽可能多的信息总是更好的,这样那些想要尝试和帮助的人就不会做所有的工作和/或重复你可能已经做过的事情。还有,什么是SQL平台?(Oracle、SQL Server、MySQL等)我更新了文本而不是图像,如果需要,请告诉我works@newuser1234 . . . SQL表表示无序集。您需要一个列来指定执行所需操作的顺序。