Advertisement
sphinxy

feb with dates

Oct 31st, 2011
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement