【问题标题】:SQL Query - make result rows into columnsSQL 查询 - 将结果行变成列
【发布时间】:2018-02-01 21:21:24
【问题描述】:

长话短说,我想从图片的顶部获取结果,并让它们像底部一样显示出来。 TestName 字段有 1300 多个选项,所以我猜想一个子查询来拉取 TestName 然后创建一个基于它的列是最好的。这是针对 Microsoft SQL 数据库的。

Orginal Table:
+-----------------+--------------+------------------+
| AccessionNumber |   TestName   |      Result      |
+-----------------+--------------+------------------+
| K09035053       | Organism     | Rhodococcus equi |
| K09035053       | Timentin     | Susceptible      |
| K09035053       | Erythromycin | Susceptible      |
| K09035053       | Sulfa-Drugs  | Resistant        |
+-----------------+--------------+------------------+

Fixed Table:
+-----------------+------------------+-------------+--------------+-------------+
| AccessionNumber |     Organism     |  Timentin   | Erythromycin | Sulfa-Drugs |
+-----------------+------------------+-------------+--------------+-------------+
| K09035053       | Rhodococcus equi | Susceptible | Susceptible  | Resistant   |
+-----------------+------------------+-------------+--------------+-------------+

【问题讨论】:

  • 请不要附上图片。将内容复制到问题中并正确格式化以使其可读。从图像中复制文本非常困难(例如,出于测试目的)。更不用说该图像不会永远可用,即使几年后人们也可能会阅读该问题。
  • 您使用的是哪个DBMS 产品?后格雷斯?甲骨文? “SQL”只是一种查询语言,而不是特定数据库产品的名称。
  • 只是 SQL,通过 Management Studio 运行查询,或者更确切地说是 Microsoft SQL 数据库。
  • 假设这是在 SQL 中,请查看动态枢轴。 SO中有大量的指南。

标签: sql sql-server pivot pivot-table


【解决方案1】:

对于 MSQL,以下应该可以工作。

    CREATE TABLE STACKOVERFLOW
    ( 
    AccessionNumber nvarchar(max),
    TestName nvarchar(max),
    Result nvarchar(max)
    )

    INSERT INTO STACKOVERFLOW
    VALUES ('K09035053', 'Organism', 'Rhodococcus equi'),
    ('K09035053', 'Timentin', 'Susceptible'),
    ('K09035053', 'Erythromycin', 'Susceptible'),
    ('K09035053', 'Sulfa-Drugs', 'Resistant')

    SELECT * FROM STACKOVERFLOW

    SELECT * FROM
    (
    SELECT AccessionNumber, TestName, Result
    FROM STACKOVERFLOW) AS SOURCETABLE
    PIVOT
    (
      MAX(Result)
      FOR TestName In ([Organism], [Timentin], [Erythromycin], [Sulfa-Drugs])
    ) AS PIVOTTABLE

编辑:

刚读到您的 TestName 有很多选项,所以您可能仍想使用 PIVOT 但在 T-SQL 中动态生成 SQL 字符串,然后执行该字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多