2016-05-19 3 views
0

У меня есть таблица, как этотPivot Доступ к SQL

Index | FeatureType | FeatureExists 
1  | BR   | 0 
1  | EI   | NULL 
1  | RD   | NULL 
1  | SEI   | 0 
1  | SNI   | NULL 
1  | SSI   | 0 

И я хотел бы, чтобы преобразовать его, как следующее:

Index | BR | EI | RD | SEI | SNI | SSI 
1  | 0 | NULL | NULL | 0 | NULL | 0 

Таким образом, есть код, который я использовал в моем приложении Microsoft Access:

TRANSFORM First(QueryFeatureLicenses.FeatureExists) AS PremierDeFeatureExists 
SELECT QueryFeatureLicenses.Index AS [Index] 
FROM QueryFeatureLicenses 
GROUP BY QueryFeatureLicenses.Index 
PIVOT QueryFeatureLicenses.FeatureType; 

И это работает как шарм.

Но как преобразовать этот запрос с синтаксисом SQL? До сих пор»Я сделал это:

SELECT BR, EI, RD, SEI, SNI, SSI 
FROM 
(
    SELECT FeatureType, FeatureExists 
    FROM QueryFeatureLicenses 
) AS d 
PIVOT 
(
    max(FeatureExists) 
    FOR FeatureType IN (BR,EI,RD, SEI,SNI,SSI) 
) AS piv; 

Но я всегда получаю следующее сообщение:

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с 'Pivot ( макс (FeatureExists) ДЛЯ FeatureType IN (BR, EI, RD, SEI, SN' в строке 7

Любые идеи?

ответ

2

PIVOT не доступны в MySQL в качестве альтернативы, вы можете использовать условной агрегации для этого:.

SELECT MAX(CASE WHEN FeatureType = 'BR' THEN FeatureExists END) AS BR 
     MAX(CASE WHEN FeatureType = 'EI' THEN FeatureExists END) AS EI, 
     MAX(CASE WHEN FeatureType = 'RD' THEN FeatureExists END) AS RD, 
     MAX(CASE WHEN FeatureType = 'SEI' THEN FeatureExists END) AS SEI, 
     MAX(CASE WHEN FeatureType = 'SNI' THEN FeatureExists END) AS SNI, 
     MAX(CASE WHEN FeatureType = 'SSI' THEN FeatureExists END) AS SSI 
FROM QueryFeatureLicenses 
GROUP BY Index