sql >> データベース >  >> RDS >> PostgreSQL

SQL:テーブルを逆転置します

    「A」、「B」、「C」の値をどのように復元するかが明確ではないため、追加するだけです

    準備:

    t=# create table s188 (scanid int,a float, b float,c float);
    CREATE TABLE
    t=# insert into s188 select 1,2,3,4;
    INSERT 0 1
    t=# insert into s188 select 2,12,13,14;
    INSERT 0 1
    t=# select * from s188;
     scanid | a  | b  | c
    --------+----+----+----
          1 |  2 |  3 |  4
          2 | 12 | 13 | 14
    (2 rows)
    

    選択:

    t=# with a as (
      select scanid,unnest(array[a,b,c]) from s188
    )
    select scanid,chr((row_number() over (partition by scanid))::int + 64),unnest
    from a;
     scanid | chr | unnest
    --------+-----+--------
          1 | A   |      2
          1 | B   |      3
          1 | C   |      4
          2 | A   |     12
          2 | B   |     13
          2 | C   |     14
    (6 rows)
    

    そしてa_horse_with_no_nameからのよりきちんとした解決策

    t=# with a as (
      select scanid, x.*
      from s188, unnest(array[a,b,c]) with ordinality as x(volume,idx)
    )
    select scanid,
           chr(idx::int + 64) as region,
           volume
    from a;
     scanid | region | volume
    --------+--------+--------
          1 | A      |      2
          1 | B      |      3
          1 | C      |      4
          2 | A      |     12
          2 | B      |     13
          2 | C      |     14
    (6 rows)
    


    1. Java8LocalDateTimeを使用したSpringDataJPA

    2. エラーコード:1055はsql_mode=only_full_group_byと互換性がありません

    3. 大きなテーブルでの遅いORDERBY

    4. MYSQLテーブルに新しい列を追加するにはどうすればよいですか?