2012-09-18 16 views
8

Mam tableA z różnymi wartościami:Łączenie dwóch zapytań SQL na jednym stole

data 
------ 
10 
15 
20 
40 
40000 
50000 
60000 

Również muszę zaczerpnąć informacje statystyczne na temat tych danych (i chcę to zrobić w jednym zapytaniu), na Przykład:

select count(data) from tableA where data < 100 
union all 
select count(data) from tableA where data >= 100 

w rezultacie otrzymuję

(No column name) 
---------------- 
4 
3 

Ale chcę, aby otrzymać wyniki w jednym rzędzie , tak:

Small | Big 
--------- 
4  | 3 

Jak to zrobić? Czy to możliwe?

Odpowiedz

10
select count(case when data < 100 then 1 end) as Small, 
     count(case when data >= 100 then 1 end) as Big 
from TableA 

ze średnią będzie wyglądać następująco.

select avg(case when data < 100 then data end) as Small, 
     avg(case when data >= 100 then data end) as Big 
from TableA 
+0

Czy można go łatwo zmienić na pracę z innym wyrażeniem (na przykład "AVG")? – qehgt

+0

Pewnie. Zaktualizowana odpowiedź. –

+2

Wykonanie kwerendy w ten sposób, używając 'case when..' zamiast kwerendy sub kwerendy na liście pól jako innych odpowiedzi, ma tę zaletę, że wykona tylko jedno skanowanie tabeli zamiast dwóch. –

10

Spróbuj sub-maila zamiast UNION ALL tak:

SELECT 
    (SELECT COUNT(data) FROM tableA WHERE data < 100) AS Small, 
    (SELECT COUNT(data) FROM tableA WHERE data >= 100) AS Big 

See this SQLFiddle

+0

Hm ... 'Niepoprawna składnia w pobliżu '''. Czy to poprawne zapytanie? – qehgt

+0

@qehgt Okay Zaktualizowano odpowiedź. – hims056

+1

To działa i prosta odpowiedź. Naprawdę Gud ... –

6
DECLARE @tst TABLE (
    val INT 

) 

INSERT INTO @tst (val) 
SELECT 10 
UNION 
SELEcT 15 
UNION 
SELECT 20 
UNION 
SELECT 40 
UNION 
SELECT 40000 
UNION 
SELECT 50000 
UNION 
SELECT 60000 

;WITH Smalls AS (
SELECT COUNT(val) Small FROM @tst WHERE val < 100 
), Bigs AS(
select count(val) Big from @tst where val >= 100 
) 
SELECT Small, Big 
FROM Smalls, Bigs 
+1

Właściwie inne odpowiedzi są o wiele ładniejsze :) –

0
create table datatable 
(
    data int 
) 

insert into datatable values(10) 

insert into datatable values(15) 

insert into datatable values(20) 

insert into datatable values(40) 

insert into datatable values(40000) 

insert into datatable values(50000) 

insert into datatable values(60000) 



create table outputtable 
( 
    small int , 
    big int 
) 

insert into outputtable 
(
    small, 
    big 
) 

select (select count(data) from datatable where data<100), 
     (select count(data) from datatable where data>=100) 

select * from datatable 

select * from outputtable 
Powiązane problemy