2017-08-14 4 views
0

j'ai deux requêtes qui devrait être l'union (avec éloquence de Laravel) mais il y a une colonne en double appelé group_date à la fois la requête et je dois montrer un d'euxUnion deux requêtes SQL avec une même colonne (en utilisant Eloquent)

SELECT 
    to_char(CREATE_UTC_DATETIME, 'yyyy-mm-dd') AS group_date, 
    COUNT(*)         AS successful_transaction 
FROM "REPORT_EVENTS" 
WHERE "RESULT_CODE" = '0' AND "EVENT_TYPE" = 'BILL' 
GROUP BY to_char(CREATE_UTC_DATETIME, 'yyyy-mm-dd') 
ORDER BY "GROUP_DATE" DESC 

SELECT 
    to_char(CREATE_UTC_DATETIME, 'yyyy-mm-dd') AS group_date, 
    COUNT(*)         AS unsuccessful_transaction 
FROM "REPORT_EVENTS" 
WHERE "RESULT_CODE" = '1' AND "EVENT_TYPE" = 'BILL' 
GROUP BY to_char(CREATE_UTC_DATETIME, 'yyyy-mm-dd') 
ORDER BY "GROUP_DATE" DESC 
+0

Que voulez-vous réaliser? Rejoindre les requêtes ci-dessus ou en obtenir l'union? – mehran

+0

En fait, je veux obtenir le résultat de l'union, enfin je devrais avoir trois colonnes 1-Group_date 2-successful_transaction 3-unsuccessful_transaction –

+0

Conceptuellement, le résultat de union a les mêmes colonnes que les requêtes sous-jacentes, mais basé sur ce que vous cherchez comme résultat, il semble que vous ayez besoin de rejoindre vos requêtes. Votre question n'est pas claire. – mehran

Répondre

0

vous ne voulez pas un UNION ici, mais plutôt une seule requête qui utilise l'agrégation conditionnelle:

SELECT 
    TO_CHAR(CREATE_UTC_DATETIME, 'yyyy-mm-dd') AS group_date, 
    SUM(CASE WHEN RESULT_CODE = '0' THEN 1 ELSE 0 END) AS successful_transaction, 
    SUM(CASE WHEN RESULT_CODE = '1' THEN 1 ELSE 0 END) AS unsuccessful_transaction 
FROM "REPORT_EVENTS" 
WHERE "EVENT_TYPE" = 'BILL' 
GROUP BY TO_CHAR(CREATE_UTC_DATETIME, 'yyyy-mm-dd') 
ORDER BY "GROUP_DATE" DESC 

Je ne donne pas de code Eloquent/Laravel ici, mais je suis assez certain que vous auriez besoin d'un requête brute personnalisée pour gérer cela. Donc, votre code PHP actuel aurait plus ou moins juste la requête ci-dessus dans sa forme brute.