SQL 不聚合转置多列 table
SQL transpose multi column table without aggregation
我有一个格式的数据集;
并且需要格式为;
上周我在 pivot 和 unpivot 方面进行了各种尝试,但我不是真正的程序员,知道什么时候向大人寻求帮助。
数据库是 运行 MSSQL 2012,数据集将由每个 ClinicalTrialID 的 14 个 Mode_Antibiotics、ModeQualifier 和 ModeMIC 条目组成,总共大约有 3000 个 ClinicalTrialID。
在纯 SQL 动态中很难做到这一点。如果我新建 T-SQL,我会编写一个 table 函数返回所需的数据集。但是,在纯 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;
希望对您有所帮助。
我有一个格式的数据集;
并且需要格式为;
上周我在 pivot 和 unpivot 方面进行了各种尝试,但我不是真正的程序员,知道什么时候向大人寻求帮助。
数据库是 运行 MSSQL 2012,数据集将由每个 ClinicalTrialID 的 14 个 Mode_Antibiotics、ModeQualifier 和 ModeMIC 条目组成,总共大约有 3000 个 ClinicalTrialID。
在纯 SQL 动态中很难做到这一点。如果我新建 T-SQL,我会编写一个 table 函数返回所需的数据集。但是,在纯 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;
希望对您有所帮助。