Как преобразовать один и тот же столбец в разные строки в один и тот же ряд в SQL? - PullRequest
0 голосов
/ 03 апреля 2020

Это то, что я хочу сделать.

----input table----

SID | VALUE
1   |  v1
1   |  v2
1   |  v3
1   |  v4
1   |  v5
2   |  s1
2   |  s2
2   |  s3

---output table----
sid | col1 | col2 | col3 | col4 | col5
1   |  v1  |  v2  |  v3  |  v4  |  v5
2   |  s1  |  s2  |  s3  |  ''  |  ''

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Общая схема условной агрегации:

SELECT
  sid,
  MAX(CASE WHEN value = 'v1' THEN value END) as col1,
  MAX(CASE WHEN value = 'v2' THEN value END) as col2,
  ...
FROM t
GROUP BY sid 

Или оставьте это для вас, чтобы поставить другие столбцы в качестве практики :)

Я предпочитаю ставить значение в качестве имя столбца, не col1, col2 и т. д. c

Также, если вы действительно хотите, чтобы пустые строки, а не нули для этих двух последних столбцов, вы можете изменить случай, когда ELSE '' (примечание: не будет работать если вы используете MIN вместо max) или используйте COALESCE вокруг MAX

0 голосов
/ 03 апреля 2020

Learn pivot

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15

сделать что-то вроде

  select *
    from 
    (
      select sid, value
      from table_name
    ) src
    pivot
    (
      sid
      for sid in ([1], [2])
    ) piv;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...