web-dev-qa-db-fra.com

Ajouter une colonne aux résultats de la requête SQL

Je prépare un rapport dans SSRS. L'ensemble de données est rempli avec une requête SQL d'un serveur MS SQL. Il interroge plusieurs tables similaires à l'aide de Union All. Le problème est qu'il y a une perte d'informations. Les différentes tables sont destinées à différents sites de travail, mais aucune des colonnes de ces tables n'a le nom du site; la seule façon d'identifier un site est par le nom de la table. Dans les colonnes combinées qui sont le résultat de l'Union Tout, il n'y a aucun moyen de savoir quelles lignes proviennent de quel site.

Existe-t-il un moyen de modifier ma requête pour ajouter une colonne aux résultats, qui aurait le site de travail auquel chaque ligne est associée? Je ne peux pas ajouter cela à la table d'origine, car j'ai des autorisations en lecture seule. J'avais pensé à quelque chose comme ça, mais je ne sais pas quel type d'expression utiliser, ou si cela peut même être fait:

SELECT t1.column, t1.column2
FROM t1
<some expression>
UNION ALL
SELECT t2.column, t2.column2
FROM t2
<some expression>
UNION ALL
...

etc. L'expression "ajouterait" une colonne, qui ajouterait le nom du site associé à chaque partie de la requête. Est-ce que cela ou quoi que ce soit d'autre pourrait fonctionner pour obtenir le nom du site?

14
Ben C.

Ajoutez-le manuellement lorsque vous générez la requête:

SELECT 'Site1' AS SiteName, t1.column, t1.column2
FROM t1

UNION ALL
SELECT 'Site2' AS SiteName, t2.column, t2.column2
FROM t2

UNION ALL
...

EXEMPLE:

DECLARE @t1 TABLE (column1 int, column2 nvarchar(1))
DECLARE @t2 TABLE (column1 int, column2 nvarchar(1))

INSERT INTO @t1
SELECT 1, 'a'
UNION SELECT 2, 'b'

INSERT INTO @t2
SELECT 3, 'c'
UNION SELECT 4, 'd'


SELECT 'Site1' AS SiteName, t1.column1, t1.column2
FROM @t1 t1

UNION ALL
SELECT 'Site2' AS SiteName, t2.column1, t2.column2
FROM @t2 t2

RÉSULTAT:

SiteName  column1  column2
Site1       1      a
Site1       2      b
Site2       3      c
Site2       4      d
18
Khan

pourquoi ne pas ajouter une colonne "source" à chacune des requêtes avec une valeur statique comme

select 'source 1' as Source, column1, column2...
from table1

UNION ALL

select 'source 2' as Source, column1, column2...
from table2
5
Diego