SQL转置多列表而不进行聚合

时间:2018-01-19 22:44:24

标签: sql sql-server multiple-columns transpose

我有一个格式的数据集;

Existing Data

并且需要格式化;

Desired Format

上周我曾多次尝试过枢轴转动,但我不是真正的程序员,知道何时向成年人寻求帮助。

数据库在MSSQL 2012上运行,数据集将包含每个ClinicalTrialID的14个Mode_Antibiotics,ModeQualifier和ModeMIC条目,总共约3000个ClinicalTrialID。

1 个答案:

答案 0 :(得分:0)

在动态的SQL中很难做到这一点。如果我是新的T-SQL,我会编写一个返回所需数据集的表函数。但是,在纯ANSI SQL中,由于您没有那么多列,您可以使用以下内容:

SELECT 
  ClinicalTrialID,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Amikacin' 
    THEN Mode_Antibiotic 
  END) Antibiotic1,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Amikacin' 
    THEN Mode_Qualifier 
  END) Qualifier1,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Amikacin' 
    THEN Mode_MIC 
  END) MIC1,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Ampicillin' 
    THEN Mode_Antibiotic 
  END) Antibiotic2,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Ampicillin' 
    THEN Mode_Qualifier 
  END) Qualifier2,
  MAX(CASE 
    WHEN Mode_Antibiotic = 'Ampicillin' 
    THEN Mode_MIC 
  END) MIC2,
  -- repeat 12 times with the remaining antibiotics
FROM t
GROUP BY ClinicalTrialID;

希望有所帮助。