Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на @DECLARE в MYSQL 5.1

MySQL няма осивен елемент функция, така че ще трябва да транспонирате данните от редове в колони с помощта на агрегатна функция с CASE израз:

select 
  sum(case when tt.type = 'UnitTest' then 1 else 0 end) UnitTest,
  sum(case when tt.type = 'WebTest' then 1 else 0 end) WebTest
from test t
inner join test_type tt
  on t.test_type = tt.id

Вижте SQL Fiddle с демонстрация .

Ако ще имате неизвестен брой types които искате да конвертирате в колони, можете да използвате подготвен израз за генериране на динамичен SQL:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN tt.type = ''',
      type,
      ''' THEN 1 else 0 END) AS `',
      type, '`'
    )
  ) INTO @sql
FROM test_type;

SET @sql 
  = CONCAT('SELECT ', @sql, ' 
            from test t
            inner join test_type tt
              on t.test_type = tt.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкнете Blobs в MySql бази данни с php

  2. MySQL администраторски архиви:Режим на съвместимост, какво точно прави това?

  3. Ограничаване на времето за влизане и изчакване за един ден във VB.NET?

  4. Изтегляне на данни в csv файл от MySQL с помощта на PHP

  5. Инсталиране на Percona/MySQL без надзор в Ubuntu