6
votes

Sum à une requête union

J'utilise Microsoft SQL SVR MGMT Studio 2008. Je n'ai pas accès à la création d'une table temporaire (la société restreint la possibilité de créer ou de modifier des tables) ou j'utiliserais cela pour résoudre ce problème.

J'ai utilisé avec succès une requête syndicale pour combiner les résultats de trois requêtes SELECT. Maintenant, j'essaie de résumer les résultats de l'Union. p>

Lorsque j'exécute la requête ci-dessous, je reçois: p> xxx pré>

et ensuite lorsque je supprime le groupe par I GET: P>

Select Period, PCC, SUM(BasicHits), SUM(FareHits), SUM(SearchHits)
From (

SELECT     AAAPeriod AS Period, 
AAAFromPCC AS PCC, 
- SUM(AAABasic) AS BasicHits,
- SUM(AAAFare) AS FareHits,
- SUM(AAASearch) AS SearchHits
FROM        HitsAaa
HAVING     (AAAPeriod = N'2010-10') 

UNION ALL

SELECT     AAAPeriod, 
AAAtoPCC,
SUM(AAABasic),
SUM(AAAFare),
SUM(AAASearch) 
FROM        HitsAaa
HAVING     (AAAPeriod = N'2010-10')

UNION ALL

SELECT      AgtPeriod, 
AgtPcc, 
SUM(AgtBasic),
SUM(AgtFare),
SUM(AgtSearch)
FROM          HitsAgent
HAVING      (AgtPeriod = N'2010-10')

)GROUP BY Period, PCC


2 commentaires

Les 2 premières questions sont les mêmes? (Et tous les trois manquent un groupe par ). Et votre table dérivée a besoin d'un alias de table.


Vous avez été correct que j'avais supprimé le groupe par erreur sur les sous-titres.


5 Réponses :


2
votes

Je n'ai pas accès à la création d'un Table temporaire (la société restreint capacité à créer ou modifier des tables) ou Je l'utiliserais pour résoudre ce problème problème.

Au lieu d'une table temporaire, essayez d'utiliser une variable de table: xxx

une variable de table peut faire la plupart des éléments une table temporaire.

Comme Martin (maintenant supprimé) la réponse suggère, envisagez de donner à la sous-requête un alias, comme: xxx

et dans votre sous-requête, le ayant devrait probablement Soyez un : xxx


0 commentaires

7
votes

Vous devez alias votre table dérivée, vous devez également utiliser un groupe avec une clause ayant une clause.

SELECT
  q1.Period, 
  q1.PCC, 
  SUM(q1.BasicHits), 
  SUM(q1.FareHits), 
  SUM(q1.SearchHits)
FROM (SELECT     
        AAAPeriod AS Period, 
        AAAFromPCC AS PCC, 
        - SUM(AAABasic) AS BasicHits,
        - SUM(AAAFare) AS FareHits,
        - SUM(AAASearch) AS SearchHits
      FROM HitsAaa
      GROUP BY 
        AAAPeriod, 
        AAAFromPCC
      HAVING (AAAPeriod = N'2010-10') 

      UNION ALL

      SELECT     
        AAAPeriod AS Period, 
        AAAtoPCC AS PCC,
        SUM(AAABasic) AS BasicHits,
        SUM(AAAFare) AS FareHits,
        SUM(AAASearch) AS SearchHits 
      FROM HitsAaa
      GROUP BY 
        AAAPeriod, 
        AAAtoPCC
      HAVING (AAAPeriod = N'2010-10')

      UNION ALL

      SELECT
        AgtPeriod AS Period, 
        AgtPcc AS PCC, 
        SUM(AgtBasic) AS BasicHits,
        SUM(AgtFare) AS FareHits,
        SUM(AgtSearch)  AS SearchHits
      FROM HitsAgent
      GROUP BY 
        AgtPeriod, 
        AgtPCC
      HAVING (AgtPeriod = N'2010-10')) q1 
GROUP BY 
  q1.Period, 
  q1.PCC


0 commentaires

5
votes

SQL Server nécessite que vous définissez un alias de table pour une table dérivée / Vue en ligne:

SELECT x.period, x.pcc, SUM(x.BasicHits), SUM(x.FareHits), SUM(x.SearchHits)
  FROM (SELECT AAAPeriod AS Period, 
               AAAFromPCC AS PCC, 
               - SUM(AAABasic) AS BasicHits,
               - SUM(AAAFare) AS FareHits,
               - SUM(AAASearch) AS SearchHits
          FROM HitsAaa
         WHERE AAAPeriod = N'2010-10'
      GROUP BY aaaperiod, aaafrompcc
        UNION ALL
        SELECT AAAPeriod, 
               AAAtoPCC,
               SUM(AAABasic),
               SUM(AAAFare),
               SUM(AAASearch) 
          FROM HitsAaa
         WHERE AAAPeriod = N'2010-10'
      GROUP BY aaaperiod, aaafrompcc
        UNION ALL
        SELECT AgtPeriod, 
               AgtPcc, 
               SUM(AgtBasic),
               SUM(AgtFare),
               SUM(AgtSearch)
          FROM HitsAgent
         WHERE AgtPeriod = N'2010-10'
      GROUP BY agtperiod, agtpcc) AS x
GROUP BY x.period, x.pcc


1 commentaires

Merci!!! L'ajout de la désignation t et t a fonctionné. Merci à tous pour votre aide.



2
votes

Changez votre première ligne en xxx

et la dernière ligne à xxx

Vous devez définir un alias de table (dans ce cas T) Pour les tables intérieures

En outre, vous devez groupe par les requêtes internes


1 commentaires

+1: Les alias de table ne doivent pas nécessairement être utilisés, mais SQL Server nécessite qu'ils soient définis pour des tables dérivées / des vues en ligne.



-1
votes

Sélectionnez R. "Artigo", R. "Dscription" comme "Descricao", R. "CODIGO", R. "Clelle", R. "iTMSGRPCOD", somme (r. "Qtd / kg") comme "qtd / kg", somme (r. "Valor") comme "Valor", Somme (r. "Valor") / somme (r. "Qtd / kg") comme "PMVL" à partir de ( Sélectionnez T1. "ItemCode" comme "Artigo", T1. "DSCRIPTION", T0. "Codigo" comme "codigo", t0. "CardName" comme "client", T3. "Itmsgrpcod", somme (T1. "Quantité") -1 comme "qtd / kg", Somme (T1. "LINETOTAL") EM> -1 comme "Valor", (Somme (T1. "LINETOTAL") / SUM (T1. "Quantité")) comme "PMVL" à partir de Orin T0 se jointure intérieure Rin1 T1 sur T0. "Docentry" = T1. "Docentry" Rejoindre OITM T3 sur T1. "ItemCode" = T3. "ItemCode" JOIN DE GAUCHE IBT1 T2 sur T0. "DOCENTRY" = T2. "BASEDENTRY" et T1. "ItemCode" = T2. "CoteCode" et T2. "Baselinnum" = T1. "Linénum" où t0. "docdier"> = ('2021-03-19') et t0. "Docdate" Sélectionnez T1. "ItemCode" comme "Artigo", T1. "DSCRIPTION", T0. "Codigo" comme "codigo", t0. "CardName" comme "client", T3. "ITMSGRPCOD", somme (T1. "Quantité") comme "qtd / kg", somme (T1. "Linetotal") comme "Valor", (somme (T1. "LINETOTAL") / SUM (T1. "Quantité ")) comme" PMVL " à partir de OINV T0 Inner Rejoignez Inv1 T1 sur T0. "Docentry" = T1. "Docentry" - Rejoindre Gauche OITM T3 sur T1. "ItemCode" = T3. "Code de carton" Rejoindre Gauche OITM T3 sur T1. "itemCode" = T3. "CoteCode" - Se jointure intérieure OITM T3 sur T3. "ItemCode" = T3. "Code de carton" JOIS DE JOIN DE GAUCHE IBT1 T2 sur T0. "DOCENTRY" = T2. "BASEENTRY" et T1. "ItemCode" = T2. "CoteCode" et T2. "Baselinnum" = T1. "Linenum" P>

    where T0."DocDate"  >= ('2021-03-19') and T0."DocDate" <= ('2021-03-19') 
    and T3."ItmsGrpCod" like '___' 
    group by T1."ItemCode", T1."Dscription", T0."CardCode", T0."CardName",T3."ItmsGrpCod"
    ) as R
    group by R."Artigo", R."Dscription", R."Codigo", R."Cliente",R."ItmsGrpCod"


1 commentaires

S'il vous plaît ne publiez pas uniquement le code comme réponse, mais fournissez également une explication de votre code et de la manière dont il résout le problème de la question. Les réponses avec une explication sont généralement plus utiles et de meilleure qualité, et sont plus susceptibles d'attirer des upvotes.