【问题标题】:SQL query design for getting a table with column depending on a column value in SQL Server用于根据 SQL Server 中的列值获取具有列的表的 SQL 查询设计
【发布时间】:2015-04-29 02:32:53
【问题描述】:

我想在 SQL Server 中执行 SQL 查询以获取表:

表1:

  id  t value
  1   R  2412
  1   Q 98797
  2   R 132
  2   Q 7589

我需要找桌子:

 id   R_value   Q_value
 1      2412     98797
 2      132      7589

我用过case和when,但是我得到了

id   R_value   Q_value
 1      2412     null
 1      null     98797

任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server sql-server-2008 windows-7 pivot


    【解决方案1】:

    使用条件聚合:

    SQL Fiddle

    SELECT
        id,
        MAX(CASE WHEN t = 'R' THEN value END) AS R_value,
        MAX(CASE WHEN t = 'Q' THEN value END) AS Q_value
    FROM YourTable
    GROUP BY id
    

    【讨论】:

      【解决方案2】:

      您可以将maxmingroup by 一起使用以去除null 值并聚合具有相同id 的行:

      select id
           , min(case when t = 'R' then value end) as R_value
           , min(case when t = 'Q' then value end) as Q_value
      from tbl
      group by id
      

      【讨论】:

        【解决方案3】:

        您可以像这样轻松地使用PIVOT 表运算符:

        SELECT
          id,
          R AS R_value,
          Q AS Q_value
        FROM table1 AS t1
        PIVOT
        (
          MAX(value)
          FOR t IN(R, Q)
        ) AS p;
        

        这会给你:

        | id | R_value | Q_value |
        |----|---------|---------|
        |  1 |    2412 |   98797 |
        |  2 |     132 |    7589 |
        

        【讨论】:

        • 我们需要 'R' 作为 R_value 吗?否则,它不起作用。谢谢
        • 不,你可以改成 srlect *
        猜你喜欢
        • 2023-03-08
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多