Написание одного запроса для нескольких запросов с одинаковыми условиями - PullRequest
0 голосов
/ 22 октября 2011
select column1,column2,column3 from table1 where column5=0 and column6=0
select column1,column2,column3 from table1 where column5!=0 and column6!=0

Это два оператора sql, считывающие данные из одной таблицы1. Есть ли способ написать один запрос, который возвращает те же данные?

Мне нужен отдельный результат для (column5 = 0 AND column6 = 0) и (column5! = 0 AND column6! = 0) в одном запросе.

as example:
select column1 as c1,column2 as c2,column3 as c3 from table1 where column5=0 and  column6=0
union
select column1 as c1_,column2 as c2_,column3 as c3_ from table1 where column5!=0 and column6!=0

Ответы [ 6 ]

1 голос
/ 22 октября 2011
SELECT column1, column2, column3 
FROM table1 
WHERE (column5 = 0 AND column6 = 0) OR (column5 != 0 AND column6 != 0)
0 голосов
/ 24 октября 2011
select 
sum(
 case when (column5=0 or column6=0 ) 
 then 1 else 0 end 
   ) as c1 ,

 sum(
 case when (column5=0 or column6=0 ) 
 then 1 else 0 end 
   ) as c2 ,
 sum(
 case when (column5=0 or column6=0 ) 
 then 1 else 0 end 
  ) as c3 ,

sum(
 case when (column5!=0 or column6!=0 ) 
 then 1 else 0 end 
) as c1_ ,

  sum(
 case when (column5!=0 or column6!=0 ) 
 then 1 else 0 end 
  ) as c2_ ,
 sum(
 case when (column5!=0 or column6!=0)  
 then 1 else 0 end 
   ) as c3_ ,

from table1
0 голосов
/ 23 октября 2011

Если я правильно понимаю, вы хотите разделить две части результата.Для этого добавьте предложение ORDER BY.

SELECT column1, column2, column3 
FROM   table1 
WHERE  (column5 =  0 AND column6 =  0)
    OR (column5 != 0 AND column6 != 0)
ORDER  BY (column5 = 0) DESC -- it's enough to include one column in this case.

Если вы также хотите иметь возможность различать их, добавьте еще один столбец, обозначающий источник:

SELECT (column5 = 0) AS first_part, column1, column2, column3 
FROM   table1 
WHERE  (column5 =  0 AND column6 =  0)
    OR (column5 != 0 AND column6 != 0)
ORDER  BY 1 DESC;
0 голосов
/ 22 октября 2011
SELECT column1,column2,column3 from table1 where (column5=0 and column6=0) or (column5!=0 and column6!=0)
0 голосов
/ 22 октября 2011

Как уже упоминали другие, вы можете использовать UNION.Чтобы определить, какие записи пришли из какого запроса, вы должны сделать это следующим образом:

select 'query1', column1,column2,column3 from table1 where column5=0 and column6=0
union
select 'query2', column1,column2,column3 from table1 where column5!=0 and column6!=0

Затем при обработке набора записей вы можете проверить первое значение и решить, что делать с остальными.

0 голосов
/ 22 октября 2011

Если вы хотите получить все результаты из обоих запросов в одном наборе результатов, вы можете использовать UNION примерно так:

select column1,column2,column3 from table1 where column5=0 and column6=0
union
select column1,column2,column3 from table1 where column5!=0 and column6!=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...