【问题标题】:Using Pivot on SQL在 SQL 上使用 Pivot
【发布时间】:2014-12-03 20:21:33
【问题描述】:

我知道 stackoverflow 上有很多支点示例,我可以理解它们,但现在我有一个我无法解决的问题,因为与其他问题不同,请我可以接受您将此问题标记为重复或降低我的分数,但我需要一个答案,我需要旋转这个表

 Co_ordenAt                              Co_EnfermedadPatologica                 No_NombreEnfPatologica                     Fl_Diagnostico 
--------------------------------------- --------------------------------------- ----------------------------------------------------------------------------
83412520141                             1                                       Alergias                                    1              
83412520141                             2                                       Asma                                        1              
83412520141                             3                                       Bronquitis                                  0              
83412520141                             4                                       Diabetes                                    0              
83412520141                             5                                       HTA                                         1  
83412520142                             1                                       Alergias                                    0              
83412520142                             2                                       Asma                                        0              
83412520142                             3                                       Bronquitis                                  0              
83412520142                             4                                       Diabetes                                    1              
83412520142                             5                                       HTA                                         0         

像这张桌子一样

 Co_ordenAt                              Alergia                                Asma                                       Bronquitis                  Diabetes                 HTA
--------------------------------------- --------------------------------------- ----------------------------------------------------------------------------------------------------------------------
83412520141                             Peanuts                                "observasion"                                0                          0                         "observasion"          
83412520142                             0                                       0                                           0                          "observasion"               0                                                           

我试过这个代码

SELECT [Co_ordenAt], [Alergia], [Asma] ,[Bronquitis],[Diabetes],[ HTA]
from
(
      SELECT Co_ordenAt,( CASE  WHEN No_Diagnostico='' THEN 'No' ELSE No_Diagnostico END ) as Diagnositco, Co_EnfermedadPatologica, No_NombreEnfPatologica, Fl_Diagnostico, T_AntecedentePersonal.No_Diagnostico
    FROM
    [dbo].[T_AntecedentePersonal] INNER JOIN T_EnfermedadPatologica
    ON T_AntecedentePersonal.Co_EnfermedadPatologica = T_EnfermedadPatologica.Co_EnfedadPatologica
      WHERE Co_ordenAt in (83412520141,83412520142)  
    ) x
pivot
(
  max(Diagnositco)
  FOR No_NombreEnfPatologica in( [Alergia], [Asma] ,[Bronquitis],[Diabetes],[ HTA])
)p

如果 Fl_diagnostico 为 1(表示为真),No_Diagnostico 是医生的评论,如果 No_Diagnostico 为 NULL,则它应该说“No”

但它返回一个重复的 Co_ordenAt,与第一个表一样,但包含我指定的列,除了具有 Co_enfermedadPatologica 的列(如第一个表)之外,所有列都显示为空

83412520141 1   PEANUT  NULL    NULL    NULL    NULL    
83412520141 2   NULL    OBV     NULL    NULL    NULL    
83412520141 3   NULL    NULL    NO      NULL    NULL    
83412520141 4   NULL    NULL    NULL    NO      NULL    
83412520141 5   NULL    NULL    NULL    NULL    OBV 
83412520142 1   NO      NULL    NULL    NULL    NULL    
83412520142 2   NULL    NO      NULL    NULL    NULL    
83412520142 3   NULL    NULL    NO      NULL    NULL    
83412520142 4   NULL    NULL    NULL    OBV     NULL    
83412520142 5   NULL    NULL    NULL    NULL    NO  

我只希望 Co_OrdenAt 将所有内容放在一行中,但我已经尝试了很多代码,即使是 XML 和动态查询也是如此

【问题讨论】:

    标签: sql sql-server pivot pivot-table


    【解决方案1】:

    在您的内部查询中,您应该只选择您真正需要的列。

    只需在您的内部查询中注释以下列:

    • Co_EnfermedadPatologica
    • Fl_Diagnostic
    • T_An​​tecedentePersonal.No_Diagnostic

    希望这会有所帮助。

    【讨论】:

    • 这是正确的,您可以在fiddle中看到OP查询的修改版本
    • 更复杂的版本是按Co_ordenAt 分组,并在外部查询中的所有 enfermedades 上选择 max。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多