【问题标题】:SQL transpose multi column table without aggregationSQL转置多列表而不聚合
【发布时间】:2018-01-19 22:44:23
【问题描述】:

我有一个格式的数据集;

并且需要它的格式;

上周我在pivot和unpivot方面进行了各种尝试,但我不是一个真正的程序员,也知道什么时候该向大人寻求帮助。

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

【问题讨论】:

  • 您的预期结果中是否存在一些类型-o?两个表之间的 mode_qualifier 似乎不一致。
  • 我现在没有时间做这个,虽然它很诱人。此链接可能会有所帮助blogs.msdn.microsoft.com/kenobonn/2009/03/22/…
  • 这是格式请求者的剪切和粘贴示例...我已更新图像...感谢您的关注
  • 感谢 StelioK 的链接...我会在周末看看它

标签: sql sql-server multiple-columns transpose


【解决方案1】:

很难在纯 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;

希望对您有所帮助。

【讨论】:

  • 感谢他为 Oleg 编写代码,这种方法确实有效。我可能需要对其进行一些调整,因为抗生素的名称可能从 ClinicalTrialID 到 ClinicalTrialID 不同。
猜你喜欢
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2020-11-17
相关资源
最近更新 更多