2014-12-01 14 views
7

Mam dwa pytania, które zwracają jeden wynik każda tj jeden numerJak połączyć dwa wyniki zapytania w jeden wiersz?

Select Count(*) as StockCountA from Table_A where dept='AAA' 

Wyniki

StockCountA 
550 

.

Select Count(*) as StockCountB from Table_B where dept='BBB' 

Wyniki

StockCountB 
450 

pragnę złączyć dwa wyniki na jednej płycie rzędu tj

| StockCountA | StockCountB  
| 550   | 450 

Odpowiedz

25

Można użyć:

select 
(Select Count(*) as StockCountA from Table_A where dept='AAA') as StockCountA, 
(Select Count(*) as StockCountB from Table_B where dept='BBB') as StockCountB 

Objaśnienie: można wybrać pojedyncza wartość jako pole w instrukcji select, więc możesz napisać coś takiego, jak:

select 
    x.*, 
    (select Value from Table_Y y) as ValueFromY 
from 
    Table_X x 

To będzie działać tylko wtedy, gdy zapytanie podrzędne powróci co najwyżej 1 wiersz. Z 0 wierszy ValueFromY zwróci NULL i z więcej niż jednym wierszem, zapytanie się nie powiedzie.

Dodatkową cechą select (SQL Server, MySQL i prawdopodobnie innych) jest to, że można wybrać tylko wartości bez określania stolik w ogóle coś takiego:

Select 
    3.14 as MoreOrLessPI 

Można połączyć oba te fakty połączyć dwa liczniki do pojedynczego wyniku, pisząc maila, który wygląda tak:

Select 
    (Select query that returns at most 1 row) as Result1, 
    (Select another query that returns at most 1 row) as Result2 
+0

Dzięki, jeśli znasz podstawy, to wiesz, co robisz inaczej, jeśli jesteś ekspertem :) – Rosebud

+1

Tak, dlatego postanowiłem dodać trochę wyjaśnienia. Trudno znaleźć odpowiednią dokumentację, której nie wiesz, czego szukać. :) – GolezTrol

0

Try poniżej SQL:

select (Select Count(*) as StockCountA from Table_A where dept='AAA') StockCountA, 
     (Select Count(*) as StockCountB from Table_B where dept='BBB') StockCountB 

Hope this helps :)

4

To powinno dać pożądanego rezultatu:

SELECT * FROM(
(Select Count(*) as StockCountA from Table_A where dept='AAA') StockCountA , 
(Select Count(*) as StockCountB from Table_B where dept='BBB') StockCountB 
); 
+0

Ciekawe wariacje na temat innych odpowiedzi. Zasadniczo używasz starej składni łączenia (przed 1992 rokiem) do łączenia dwóch zapytań. Wynik będzie jednak taki sam. – GolezTrol

-1

Choć nie zawsze najlepsza praktyka, jest to możliwe do zrobienia krzyżem JOIN ..

SELECT 
COUNT(Table_A.SOME_COLUMN) as StockCountA 
,COUNT(Table_B.SOME_COLUMN) as StockCountB 
FROM Table_A, Table_B WHERE Table_A.dept='AAA' AND Table_B.dept='BBB'