2015-03-20 1 views
0

Bonjour à tous. J'ai du mal à combiner 3 sorties ensemble en utilisant une déclaration de tous les syndicats. Ma requête est ci-dessous et Im obtenant une erreur disant ATTR est invalide.Oracle Sql Union toutes les erreurs lors de la création d'une nouvelle colonne

Des idées?

Error report - 
SQL Error: ORA-00904: "ATTR": invalid identifier 
00904. 00000 - "%s: invalid identifier" 



SELECT 
       "TOC_GENDER" as Attr_Type 
       ,TOC_GENDER as Attr 
       ,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT 
       ,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT 
FROM zeta.Customer_table 
GROUP BY Attr_Type, attr 
union all 
SELECT 
       "TOC_HD_TARGET_SEGMENT" as Attr_Type 
       ,TOC_HD_TARGET_SEGMENT as attr 
       ,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT 
       ,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT 
FROM zeta.Customer_table 
GROUP BY Attr_Type, attr 
union all 
SELECT 
       "TOL_POLK_COMPETITIVE_BRAND" as Attr_Type 
       ,TOL_POLK_COMPETITIVE_BRAND as attr 
       ,COUNT (DISTINCT CON_INDIVIDUAL_ID)  AS UNIQ_INDIV_ID_CNT 
       ,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT 
FROM zeta.Customer_table 
GROUP BY Attr_Type, attr 
ORDER BY Attr_Type, attr; 

Répondre

0

Vous ne pouvez pas utiliser des alias dans group by. Remplacez-les par group by TOC_GENDER, etc.

En outre, ORDER BY peut être difficile avec UNION (et ne peut pas non plus utiliser d'alias). Entourez la requête entière dans un select externe avec la clause ORDER BY actuelle ou modifiez-la en ORDER BY 1,2.


Pour ajouter une colonne avec des valeurs statiques, vous devez utiliser des guillemets simples, plutôt que des guillemets doubles. Les guillemets simples sont utilisés pour délimiter une chaîne, tandis que les guillemets sont utilisés pour délimiter un identifiant (tel qu'un nom de table ou un nom de colonne).

Comme une colonne avec une chaîne statique a une valeur unique dans l'ensemble du jeu de résultats, elle n'a pas besoin d'être incluse dans la clause GROUP BY.

+0

Cela a résolu l'erreur (merci), mais j'essayais de créer une colonne appelée Attr_Type avec la valeur «TOC_Gender». La colonne suivante Attr aura les valeurs réelles de TOC_Gender. Fondamentalement, je veux que le nombre de clients pour différentes variables dans ma table. Ces variables ont toutes des valeurs multiples, le genre est masculin, féminin. Le segment cible a 6 valeurs, etc. Puisque les colonnes sont toutes différentes, je dois les renommer de la même façon, mais j'ai besoin d'un moyen de savoir qui appartient à quelles colonnes. Avoir du sens? –

+0

Je l'ai - ça a marché. Merci Allan –

3

ne pas regrouper sous le nom crénelage de la colonne:

SELECT 
       "TOC_GENDER" as Attr_Type 
       ,TOC_GENDER as Attr 
       ,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT 
       ,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT 
FROM zeta.Customer_table 
GROUP BY Attr_Type, attr 

devrait être

SELECT 
       "TOC_GENDER" as Attr_Type 
       ,TOC_GENDER as Attr 
       ,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT 
       ,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT 
FROM zeta.Customer_table 
GROUP BY TOC_GENDER 
+0

Il n'y a pas vraiment de point à énumérer deux fois la même colonne dans la clause 'GROUP BY'. – Allan

+0

@Allan - bon point (n'a pas lu assez attentivement) - supprimé nom en double – Dibstar