SQL выберите столбец с тем же ключом, если все значения равны нулю - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть два столбца, ColumnA и ColumnB, иногда columnB не заполняется, и это должно быть e. Я ищу запрос, который будет выбран, только если все столбцы не заполнены.

ColumnA|ColumnB
Apples|
Apples|
Apples|Orange

Это то, чем я являюсь, но это неверно, потому что он говорит, что ColumnA имеет значение null с тем же значением, а ColumnB заполнен. Я хочу, чтобы запрос только возвращал строки, если весь столбец B не заселен.

SELECT ColumnA
 FROM tblMyTable
WHERE ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NULL)

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

Ваш текущий запрос дает слишком много результатов. Те, которые вы хотите исключить, это те, где равно a ColumnB значение:

SELECT ColumnA
 FROM tblMyTable
WHERE ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NULL)
AND NOT ColumnA IN
      (SELECT ColumnA 
         FROM tblMyTableB
        WHERE ColumnB IS NOT NULL)

Или умнее:

select ColumnA,COUNT(ColumnB) from tblMyTable
group by ColumnA having COUNT(ColumnB) = 0

Поскольку COUNT(Expression) учитывает только ненулевые значения выражения

2 голосов
/ 07 февраля 2012

Похоже, ваша логика обратная:

  • Ваш запрос находит значения в столбце A, где равно NULL-значению в столбце B.
  • Iдумаю, вам нужны значения в столбце A, где не a ненулевое значение в столбце B.

Попробуйте добавить NOT в двамест и добавьте DISTINCT, чтобы избежать дублирования результатов:

SELECT DISTINCT ColumnA
FROM tblMyTable
WHERE ColumnA NOT IN
      (SELECT ColumnA 
       FROM tblMyTableB
       WHERE ColumnB IS NOT NULL)

Кроме того, если ColumnA может быть NULL, то вам придется исключить эти значения NULL из вашего внутреннего запроса, в противном случае NOT INвыражение будет возвращать NULL вместо True, поэтому результаты не будут возвращены:

SELECT DISTINCT ColumnA
FROM tblMyTable
WHERE ColumnA NOT IN
      (SELECT ColumnA 
       FROM tblMyTableB
       WHERE ColumnA IS NOT NULL
       AND ColumnB IS NOT NULL)
0 голосов
/ 07 февраля 2012

Использование EXCEPT.Это может быть выражено как

Получить столбец A, ЗА ИСКЛЮЧЕНИЕМ, где некоторые ненулевые значения в столбце B для этого столбца A

DECLARE @MyTable TABLE (ColumnA varchar(20) NOT NULL, ColumnB varchar(20) NULL);

INSERT @MyTable VALUES
  ('Apple', NULL),('Apple', NULL),('Apple', 'Orange'),
  ('Banana', NULL),('Banana', NULL), 
  ('Strawberry', 'Pie'), ('Strawberry', 'Pie')

SELECT ColumnA FROM @MyTable
EXCEPT
SELECT ColumnA FROM @MyTable WHERE ColumnB IS NOT NULL

Подробнее об ИСКЛЮЧЕНИИ: Почему EXCEPT существует в T-SQL?

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