Digamos que eu tenha esta tabela MySQL:
+--------------+----+-----------------+------------+
| val_critical | qs | code_critical | code_line |
+--------------+----+-----------------+------------+
| 1 | YS | 4.01 - Passers | GX10-13686 |
| 1 | YS | 3.03 - Chains | GX10-13686 |
+--------------+----+-----------------+------------+
Gostaria de obter uma tabela com os valores das linhas code_critical
nas colunas.
Até agora consegui obter uma saída como esta:
+------------+----------------+---------------+
| code_line | 4.01 - Passers | 3.03 - Chains |
+------------+----------------+---------------+
| GX10-13686 | 1 | 0 |
| GX10-13686 | 0 | 1 |
+------------+----------------+---------------+
Em vez de
+------------+----------------+---------------+
| code_line | 4.01 - Passers | 3.03 - Chains |
+------------+----------------+---------------+
| GX10-13686 | 1 | 1 |
+------------+----------------+---------------+
Usando esta consulta: SQL Fiddle
Personalizei esta boa resposta: T-SQL Pivot? Possibilidade de criar colunas de tabela a partir de valores de linha
Agora, sua tabela de saída atual como:
Vamos considerar o nome da tabela:
Seat_Marker
Em seguida, atualize sua consulta como:
Ele retornará dados como:
Código de exemplo: db<>fiddle
Sua tentativa existente estava quase lá. Se você remover
code_critical
daGROUP BY
cláusula, funcionará.Os critérios
val_critical
eqs
que você está incluindo em sua agregação condicional são desnecessários, pois já estão aplicados naWHERE
cláusula.Além disso, em vez da
SUM(CASE WHEN `code_critical` = 'value' THEN 1 ELSE 0 END) AS `value`
construção, você pode abreviá-la paraSUM(`code_critical` = 'value') AS `value`
.Aqui está um db<>fiddle .