Как проверить нулевые значения в выборе всего запроса? - PullRequest
4 голосов
/ 15 июня 2011

У меня есть ситуация, в которой мне нужно выбрать все столбцы из таблицы, и запрос выглядит примерно так:

select     sr.*,
           cs.subjectid,
           cs.priority,
           cs.subjectname   
from       sometable sr,   
           otherTable cs   
where      sr.col1='E2011FT0'   
  and      sr.col2='5'     
  and      sr.col3=  '66018'  
  and      cs.col1=sr.col1
order by   cs.col2;

Как проверить наличие нулевых значений в столбцах sr.* и заменить ихс другим значением?В таблице sometable много столбцов, и я стараюсь не перечислять их все явно.

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Я не верю, что то, что вам нужно, возможно в стандартном SQL или MySQL (ну, не прямо в таблице, но см. Ниже возможное решение).

Нет возможности выполнить обычную манипуляцию с колонками на sr.*, вам придется делать колонки по отдельности, что-то вроде:

select sr.column1,
       sr.column2,
       coalesce (sr.column3, 0),
       sr.column4,
       cs.subjectid ...

Одна из возможностей, хотя и немного глупая, этопредоставить представление по фактической таблице, где каждый столбец представления имеет аналогичное имя, но определяется как coalesce в эквивалентном столбце таблицы.Под этим я подразумеваю что-то вроде:

create view sometableview (column1, column2, column3, column4)
    as select column1, column2, coalesce (column3, 0), column4
        from sometable;

select srv.*,
       cs.subjectid, ...
:
from sometableview srv,   
     otherTable cs
where ...

Это не сделает его более быстрым , но это упростит ваш запрос, что, как вам кажется, и нужно.Я не совсем уверен, , почему это требование, так как запросы, как правило, устанавливаются один раз и меняются редко, так что об их длине необычно беспокоиться.Но я собираюсь предположить, что у вас есть веские основания для требования, пока не будет сообщено иначе: -)

0 голосов
/ 15 июня 2011

Используйте SELECT с функцией COUNT для подсчета всех строк данного столбца, включая нулевые значения, используйте функцию ISNULL. Функция ISNULL может заменить нулевое значение допустимым значением. С помощью функции IsNULL NULL заменяется на 0.

CREATE TABLE tabcount (
  pkey int IDENTITY NOT NULL CONSTRAINT pk_tabcount PRIMARY KEY,
  col1 int NULL)
GO

INSERT tabcount (col1) VALUES (10)
GO
INSERT tabcount (col1) VALUES (15)
GO
INSERT tabcount (col1) VALUES (20)
GO
INSERT tabcount (col1) VALUES (NULL)
GO

SELECT AVG(col1) A1,                                 (1)
       AVG(ISNULL(col1,0)) A2,                       (2)
       COUNT(col1) C1,                               (3)
       COUNT(ISNULL(col1,0)) C2,                     (4)
       COUNT(*) C3                                   (5)
FROM tabcount
GO






A1          A2          C1          C2          C3
----------- ----------- ----------- ----------- ---
15          11          3           4           4

- нулевое значение исключается совокупностью или другая операция SET.

(1) - значения NULL исключаются. (2) - С помощью функции IsNULL NULL заменяется на 0. (3) - значения NULL исключаются. (4) - С помощью функции IsNULL NULL заменяется на 0. (5) - COUNT (*) вычисляет все строки, даже те, которые имеют значения NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...