2013-05-20 6 views
1

J'ai deux requêtes mysql et voudrais les combiner en un.Joindre deux requêtes sql dans un

Celui-ci "fusionne" fondamentalement deux colonnes en une seule.

SELECT description 

CASE 
    WHEN checkbox2 = '2' THEN '2' 
    WHEN checkbox2 = '1' THEN '1' 
    WHEN checkbox2 = '0' THEN '0' 
    WHEN checkbox1 = '1' THEN '1' 
    WHEN checkbox1 = '0' THEN '0' END 'checkbox_merge', 

FROM table2 
LEFT JOIN table3 
    ON table2.id2 = table3.id2 
ORDER BY table2.id2 

Celui-ci prend deux tables et fait pivoter le nom (A-> D) et les utilise comme colonnes pour tracer une grille si vous voulez.

SELECT description 

    MAX(CASE WHEN column1 = 'A' THEN checkbox1 ELSE '-' END) 'A', 
    MAX(CASE WHEN column1 = 'B' THEN checkbox1 ELSE '-' END) 'B', 
    MAX(CASE WHEN column1 = 'C' THEN checkbox1 ELSE '-' END) 'C', 
    MAX(CASE WHEN column1 = 'D' THEN checkbox1 ELSE '-' END) 'D', 

FROM table1 
JOIN table2 
    ON table2.id = table1.id 
WHERE table2.id = var1 and table1.id = var1 
GROUP BY description 

Je voudrais prendre la première requête et utiliser le checkbox_merge à la place du checkbox1 dans la deuxième requête.

Des idées pour y parvenir?

Répondre

2

Essayez ceci:

SELECT 
    description, 
    MAX(
    CASE 
     WHEN column1 = 'A' 
     THEN (
      CASE 
       WHEN checkbox2 = '2' THEN '2' 
       WHEN checkbox2 = '1' THEN '1' 
       WHEN checkbox2 = '0' THEN '0' 
       WHEN checkbox1 = '1' THEN '1' 
       WHEN checkbox1 = '0' THEN '0' 
      END 
     ) 
    ELSE '-' 
    END 
) 'A' 

FROM 
    table1 
JOIN table2 
    ON table2.id = table1.id 
LEFT JOIN table3 
    ON table2.id2 = table3.id2 
WHERE 
    table1.id = var1 
GROUP BY description 
+0

'checkbox2' est de table3 ... –

+0

désolé, je vais mettre à jour ma requête – Stephan

+0

fait, pls maintenant essayer – Stephan

2

Avertissement: Ceci fonctionne sur SQL Server, pas sûr de MySQL. Il suffit de imbriquer la première requête dans le second, semblable à ce mockup:

SELECT description 

    MAX(CASE WHEN t2.column1 = 'A' THEN t1.checkbox_merge ELSE '-' END) 'A', 
    MAX(CASE WHEN t2.column1 = 'B' THEN t1.checkbox_merge ELSE '-' END) 'B', 
    MAX(CASE WHEN t2.column1 = 'C' THEN t1.checkbox_merge ELSE '-' END) 'C', 
    MAX(CASE WHEN t2.column1 = 'D' THEN t1.checkbox_merge ELSE '-' END) 'D', 

FROM (
    SELECT 
     CASE 
      WHEN checkbox2 = '2' THEN '2' 
      WHEN checkbox2 = '1' THEN '1' 
      WHEN checkbox2 = '0' THEN '0' 
      WHEN checkbox1 = '1' THEN '1' 
      WHEN checkbox1 = '0' THEN '0' 
     END as [checkbox_merge], 
     table2.id2 as [id] 
    FROM table2 
    LEFT JOIN table3 
     ON table2.id2 = table3.id2 
    ORDER BY table2.id2) 
as t1 
JOIN table2 t2 
    ON t1.id = t2.id 
WHERE t2.id = var1 and t1.id = var1 
GROUP BY t2.description 
+0

Cela fonctionne avec de légères modifications sur mysql. Je vous remercie! –

+0

de rien. Ne pas oublier de marquer comme solution pour les autres à utiliser. Publiez également vos modifications, afin que l'exemple soit complet. – Jim