2017-09-29 8 views
1

J'essaie de créer une table dans SSRS où une seule ligne affiche la somme des quantités de travail pour TypeOfWork , à partir de deux tables de base de données distinctes.Après avoir créé une union de deux tables dans SQL, comment afficher la somme de chaque table dans une seule ligne dans SSRS Tablette

J'ai créé un ensemble de données avec une union (le sql montré est simplifié, mais c'est l'idée de base) qui m'a permis d'avoir des sommes de chaque type de travail dans chaque table - en fonction du regroupement. Je peux facilement montrer les deux sommes, pour chaque type de travail, à partir des deux tables dans leur propre ligne sur le tablier SSRS. Tels que:

Zone de travail | Type de travail | Nouvelle somme de table

Zone de travail | Type de travail | Old Table Somme

... et répéter

Mais comment montrer les sommes dans une seule ligne, en tant que tel:

Zone de travail | Type de travail | Nouvelle somme de table | Old Table Somme

Voici le SQL de base:

SELECT SourceTable, WorkArea, TypeOfWork, Sum(WorkAmount) 
FROM 

(
SELECT 'OldTable' AS SourceTable, o.* 
FROM Old o 

UNION ALL 

SELECT 

'NewTable' AS SourceTable 
, NEWID() 
, '2A077AC6-8040-49CB-B1FD-CD96D0A30533' AS [OldGuid] 
, n.* 

FROM New n 

) AS ReportTable 

GROUP BY WorkArea, TypeOfWork, SourceTable 

Répondre

1

Vous pouvez utiliser une instruction CASE dans votre requête principale:

SELECT WorkArea 
    , TypeOfWork 
    , OldTableSum = SUM(CASE WHEN ReportTable.SourceTable = 'OldTable' THEN WorkAmount ELSE 0 END) 
    , NewTableSum = SUM(CASE WHEN ReportTable.SourceTable = 'NewTable' THEN WorkAmount ELSE 0 END) 
FROM 

(
SELECT 'OldTable' AS SourceTable, o.* 
FROM Old o 

UNION ALL 

SELECT 
    'NewTable' AS SourceTable 
    , NEWID() 
    , '2A077AC6-8040-49CB-B1FD-CD96D0A30533' AS [OldGuid] 
    , n.* 
FROM New n 

) AS ReportTable 

GROUP BY WorkArea, TypeOfWork 
+0

Fox. Les résultats étaient similaires, mais votre CAS m'a permis d'avoir un moyen pratique de nommer chacun des totaux. Je reçois toujours des lignes séparées pour les sommes pour chaque table. J'ai essayé de grouper sur TypeOfWork dans le groupe de lignes Tablix, mais ensuite il n'affichait que les sommes de l'ancienne table et n'affichait pas les deux sommes. J'aurais pensé grouper sur le type de travail le ferait, mais malheureusement je prends juste l'information de vieille table. –

+0

Mon mauvais, vous devez supprimer le groupe par SourceTable - J'ai corrigé ma requête ci-dessus. –

+0

lorsque j'essaye dans SQL Server Management Studio, j'obtiens cette erreur: La colonne 'ReportTable.SourceTable' n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. –