Comment combinez-vous plusieurs sélections (*) de différentes tables dans une seule déclaration?
J'ai une situation semblable à celle-ci post
mais je veux un retour.
J'ai essayé tous les syndicats mais il a craché en arrière 3 rangées séparées du compte Comment les combinez-vous en un seul?
select count(*) from foo1 where ID = '00123244552000258'
union all
select count(*) from foo2 where ID = '00123244552000258'
union all
select count(*) from foo3 where ID = '00123244552000258'
edit: je suis sur MS SQL 2005
SELECT
(select count(*) from foo1 where ID = '00123244552000258')
+
(select count(*) from foo2 where ID = '00123244552000258')
+
(select count(*) from foo3 where ID = '00123244552000258')
C'est un moyen facile.
Je suis surpris que personne n'ait suggéré cette variation:
SELECT SUM(c)
FROM (
SELECT COUNT(*) AS c FROM foo1 WHERE ID = '00123244552000258'
UNION ALL
SELECT COUNT(*) FROM foo2 WHERE ID = '00123244552000258'
UNION ALL
SELECT COUNT(*) FROM foo3 WHERE ID = '00123244552000258'
);
select
(select count(*) from foo) as foo
, (select count(*) from bar) as bar
, ...
En gros, vous faites les comptes en tant que sous-requêtes dans une sélection standard.
Un exemple serait le suivant, cela retourne 1 ligne, deux colonnes
SELECT
(SELECT COUNT(*) FROM MyTable WHERE MyCol = 'MyValue') AS MyTableCount,
(SELECT COUNT(*) FROM YourTable WHERE MyCol = 'MyValue') AS YourTableCount,
Vous pouvez combiner vos comptes comme vous le faisiez auparavant, mais vous pouvez ensuite les résumer de différentes manières, dont l'une est présentée ci-dessous:
SELECT SUM(A)
FROM
(
SELECT 1 AS A
UNION ALL
SELECT 1 AS A
UNION ALL
SELECT 1 AS A
UNION ALL
SELECT 1 AS A
) AS B
vous pouvez nommer tous les champs et ajouter une sélection externe sur ces champs:
SELECT A, B, C FROM ( your initial query here ) TableAlias
Cela devrait faire l'affaire.
select sum(counts) from (
select count(1) as counts from foo
union all
select count(1) as counts from bar)
Pour Oracle:
select(
select count(*) from foo1 where ID = '00123244552000258'
+
select count(*) from foo2 where ID = '00123244552000258'
+
select count(*) from foo3 where ID = '00123244552000258'
) total from dual;