将数据库列显示为标题

时间:2017-09-12 19:38:16

标签: sql sql-server

我有一个非常奇怪的情况,需要专家意见,有任何解决方案可用或我应该更改我的数据库结构。

测试表

ID    TestName
1       HP
2       PV
3       UX

患者测试记录

ID    PID    TestName     TestValues        Date
1      2       HP            23          12-11-2017
2      2       PV            88          12-11-2017
3      5       UX            24          14-11-2017
4      5       HP            44          14-11-2017
5      2       UX            33          15-11-2017

每位患者的预期输出

TestName   PId    12-11-2017    15-12-2017
   HP       2        23            -
   PV       2        88            -
   UX       2        -            33

现在我应该重构我的数据库,并且在MSSQL中有任何解决方案。

1 个答案:

答案 0 :(得分:0)

您可以查询如下:

Declare @cols1 varchar(max)
Declare @query nvarchar(max)

Select @cols1 = stuff((select distinct ','+QuoteName([date]) from #patientdata where pid = 2 for xml path('')),1,1,'')

Select @query = ' Select * from 
    ( Select PID, TestName, TestValues, [Date] from #patientdata where pid = 2) a
    pivot (max(TestValues) for [date] in (' + @cols1 + ') ) p '

Exec sp_executeSql @query

输出如下:

+-----+----------+------------+------------+
| PID | TestName | 2017-11-12 | 2017-11-15 |
+-----+----------+------------+------------+
|   2 | HP       | 23         | NULL       |
|   2 | PV       | 88         | NULL       |
|   2 | UX       | NULL       | 33         |
+-----+----------+------------+------------+
相关问题