2012-09-18 24 views
8

Tengo un tableA con diferentes valores:Combinar dos consultas SQL en una mesa

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

Además, tengo que conseguir algo de información estadística de que los datos (y quiero hacerlo en una consulta), para ejemplo:

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

Como resultado, recibo

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

Pero quiero recibir los resultados en una fila , como este:

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

¿Cómo hacer eso? ¿Es posible?

Respuesta

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

Con promedio que se vería así.

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

¿Se puede cambiar fácilmente para que funcione con otra expresión ('AVG' por ejemplo)? – qehgt

+0

Claro. Respuesta actualizada –

+2

Hacer la consulta de esta manera, utilizando 'case when..' en lugar de una sub consulta en la lista de campos como las otras respuestas, tiene la ventaja de que solo hará una exploración de tabla en lugar de dos. –

10

Trate sub-consulta en lugar de UNION ALL así:

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 ... 'sintaxis incorrecta cerca '' '. ¿Es una consulta correcta? – qehgt

+0

@qehgt Okay Se actualizó la respuesta. – hims056

+1

Esto funciona y es una respuesta simple. Realmente 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

En realidad, las otras respuestas son mucho más agradables :) –

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 
Cuestiones relacionadas