View difference between Paste ID: 9u3hAt63 and 8u9780pz
SHOW: | | - or go back to the newest paste.
1
--first step: create columns list and save it to a variable
2
--create columns list for current language.
3
declare @PAT_Filter nvarchar(max)
4
5
--here is a new variable with filter for patient.id.
6
--Only one string starting with set @pat_filter must leave uncommented.
7
8
--for list. comment one, leave uncommented another.
9
set @PAT_Filter=N'AND PATIENT.PAT_ExternalId in  (''04772344'',''04772344'')'
10
--for like
11
--set @PAT_Filter=N'AND PATIENT.PAT_ExternalId like  (''%4772344'')'
12
--Uncomment string below to disable filter
13
--set @PAT_Filter=N''
14
15
--we declare a variable @list , initialize it with empty string.
16
--N letter before means that it will be in National Char, because sp_executesql needs only N' variable.
17
declare @list nvarchar(max)
18
set @list=N''
19
--subquery names 'As T' select all column names, simple join. outerquery concatenate string into a var @list
20
select  @list=@list+N',['+rtrim(SYMITEM_ShortText)+N']' from
21
--remove top10 later, it for testing
22
(select distinct  top 10  isnull(symitem_shorttext,'nothing') as symitem_shorttext  from PARA_DESC INNER JOIN
23
SYMBOLITEM ON PARA_DESC.SYM_Nr = SYMBOLITEM.SYM_Nr
24
--this shorttext is a bad for column names and must be removed
25
where SYMBOLITEM.LANGUAGE_Id = 1 and symitem_shorttext not in ('......','')) as t
26
27
--remove last 'comma'
28
set @list=substring(@list,2,len(@list)-1)
29
--print for debug
30
print @list
31
print @pat_filter
32
33
declare @q nvarchar(max)
34
set @q=N'select * from
35
(SELECT
36
37
PATIENT.PAT_ExternalId, PATIENT.PAT_Birthdate, PATIENT.PAT_FirstName,
38
PATIENT.PAT_Lastname, TEST.TEST_Weight, TEST.TEST_Height,
39
MEASPARAMETER.PARA_Value, MEASPARAMETER.PARA_PredValue,
40
SUBMEASURE.SUBMEAS_BestMarker,
41
PARA_DESC.PARADES_Type,
42
TEST.TEST_GenDate,  
43
44
(select PROP_ValueN from PATIENT_ACTSETTING where COLPROP_No=1 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as weightp,
45
(select PROP_ValueN from PATIENT_ACTSETTING where COLPROP_No=2 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as heightp,
46
(select PROP_ValueS from PATIENT_ACTSETTING where COLPROP_No=9 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as diagnosis,
47
(select PROP_ValueS from PATIENT_ACTSETTING where COLPROP_No=10 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as location,
48
(select PROP_ValueS from PATIENT_ACTSETTING where COLPROP_No=11 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as doctor,
49
(select PROP_ValueS from PATIENT_ACTSETTING where COLPROP_No=12 and PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id) as location12,
50
51
(select cast(PARAGRAPH.DOCP_Text as varchar(max)) from PARAGRAPH where [DOCUMENT].DOC_Id = PARAGRAPH.DOC_Id and DOCP_Type=0 ) as Interpretation,
52
(select cast(PARAGRAPH.DOCP_Text as varchar(max)) from PARAGRAPH where [DOCUMENT].DOC_Id = PARAGRAPH.DOC_Id and DOCP_Type=24 ) as [Test quality],
53
PATIENT.PAT_ExternalId AS Expr2,
54
RTRIM(SYMBOLITEM.SYMITEM_ShortText) as ColumnName
55
FROM PATIENT INNER JOIN
56
TEST ON PATIENT.PAT_DemId = TEST.PAT_DemId INNER JOIN
57
MEASUREMENT ON TEST.TEST_Id = MEASUREMENT.TEST_Id INNER JOIN
58
SUBMEASURE ON MEASUREMENT.MEAS_Id = SUBMEASURE.MEAS_Id INNER JOIN
59
MEASPARAMETER ON SUBMEASURE.SUBMEAS_Id = MEASPARAMETER.SUBMEAS_Id INNER JOIN
60
PARA_DESC ON MEASPARAMETER.PARADES_Id = PARA_DESC.PARADES_Id INNER JOIN
61
SYMBOLITEM ON PARA_DESC.SYM_Nr = SYMBOLITEM.SYM_Nr
62
INNER JOIN PATIENT_ACTSETTING ON PATIENT.PAT_Id = PATIENT_ACTSETTING.PAT_Id INNER JOIN
63
                      [DOCUMENT] ON PATIENT.PAT_DemId = [DOCUMENT].PAT_DemId INNER JOIN
64
                      PARAGRAPH ON [DOCUMENT].DOC_Id = PARAGRAPH.DOC_Id
65
WHERE (SYMBOLITEM.LANGUAGE_Id = 1) AND (SUBMEASURE.SUBMEAS_BestMarker = 1)
66
67
'+@PAT_Filter+'
68-
--DATE FILTER will be here
68+
AND  TEST_GenDate between ''20080101'' and ''20090101''
69
) as sourcetable
70
pivot
71
(
72
max(para_value) for columnname in
73
('+@list+N')) as ptable
74
ORDER BY PAT_ExternalId'
75
76
print @q
77
exec sp_executesql @q