子查询强制转换功能

时间:2018-12-10 21:31:09

标签: sql-server casting subquery

我有以下代码用于转置某些数据(请参见下文);但是,运行代码时,我收到“操作数数据类型datetime2对于求和运算符无效”错误,我认为这是由于[RESULT_DT_TM]列同时具有日期和时间值。在杰出贡献者的帮助下,我制作了一个非常简单的代码,该代码从[RESULT_DT_TM]中删除了日期:

select cast([RESULT_DT_TM] as time (0)) as [result_dt]
 from ED_Vitals_Import_Master 

我想将此代码包含在主查询中,因此我使用了新的[result_dt]变量,但无法嵌入它。有可能做我想做的事吗?

Select *
From  (
    Select a.[PT_FIN]
          ,B.*
     From  (Select *,RN=Row_Number() over (Partition By PT_FIN Order by [RESULT_DT_TM]) From ED_Vitals_Import_Master ) A
     Cross Apply (values (concat('Time' ,RN),[RESULT_DT_TM])
                        ,(concat('Weight'   ,RN),[WEIGHT_RESULT])
                        ,(concat('SysBp'   ,RN),[SYSBP_RESULT])
                        ,(concat('DiaBP',RN),[DIABP_RESULT])
                        ,(concat('Temp' ,RN),[TEMPERATURE_RESULT])
                        ,(concat('Oxy'  ,RN),[OXYGEN_SAT_RESULT])
                        ,(concat('Fio'  ,Rn),[FIO2_RESULT])
                 ) B(Item,Value)
   ) src
 Pivot (sum(Value) for Item in  ([RESULT_DT_TM1],[Weight1],[Sysbp1],[DiaBP1], [Temp1], [Oxy1], [Fio1]
                            ,[RESULT_DT_TM2],[Weight2],[Sysbp2],[DiaBP2], [Temp2], [Oxy2], [Fio2]
                            ,[RESULT_DT_TM3],[Weight3],[Sysbp3],[DiaBP3], [Temp3], [Oxy3], [Fio3]
                            ,[RESULT_DT_TM4],[Weight4],[Sysbp4],[DiaBP4], [Temp4], [Oxy4], [Fio4]
                            ) ) pvt

1 个答案:

答案 0 :(得分:0)

由于您要混合使用数据类型,因此可能需要进行条件聚合。

示例

Select a.[PT_FIN]
      ,[RESULT_DT_TM1] = max(case when RN=1 then [RESULT_DT_TM] end)
      ,[Weight1]       = max(case when RN=1 then [Weight] end)
      ,[Sysbp1]        = max(case when RN=1 then [Sysbp] end)
      ,[DiaBP1]        = max(case when RN=1 then [DiaBP] end)
      ,[Temp1]         = max(case when RN=1 then [Temp] end)
      ,[Oxy1]          = max(case when RN=1 then [Oxy] end)
      ,[Fio1]          = max(case when RN=1 then [Fio] end)
      ,[RESULT_DT_TM2] = max(case when RN=2 then [RESULT_DT_TM] end)
      ,[Weight2]       = max(case when RN=2 then [Weight] end)
      ,[Sysbp2]        = max(case when RN=2 then [Sysbp] end)
      ,[DiaBP2]        = max(case when RN=2 then [DiaBP] end)
      ,[Temp2]         = max(case when RN=2 then [Temp] end)
      ,[Oxy2]          = max(case when RN=2 then [Oxy] end)
      ,[Fio2]          = max(case when RN=2 then [Fio] end)
      --- Extend the Groups Here ---
 From  (Select *,RN=Row_Number() over (Partition By PT_FIN Order by [RESULT_DT_TM]) From ED_Vitals_Import_Master ) A
 Group By a.[PT_FIN]