字符串的SQL透视

字符串的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

我在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      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表表示无序集。您需要一个列来指定执行所需操作的顺序。