Выберите запись со столбцами ненулевых значений - PullRequest
0 голосов
/ 03 мая 2018

Я застрял в этой проблеме. Если у меня есть такая таблица:

----------------------------------------
ID |  field1 | field2 | field3| field4 |
----------------------------------------
1  |   1     |   0    |    1  |  0     |
----------------------------------------
2  |   0     |   1    |    0  |  1     |
----------------------------------------

Я хочу написать запрос, который выбирает запись только с столбцами, равными = 1, как 1. где ID = 1

 ---------------------
ID |  field1 | field3 
----------------------
1  |   1     |   1   

2. Где ID = 2

 ---------------------
ID |  field2 | field4 
----------------------
2  |   1     |   1   

Можете ли вы, ребята, предложить или дать мне совет, как это сделать?

Большое вам спасибо за то, что нашли время прочитать мой вопрос.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Нет, SQL этого не делает, условно возвращая столбцы во время выполнения.

Набор возвращаемых столбцов определяется во время синтаксического анализа и подготовки оператора SQL. Он не может быть динамически изменен во время выполнения.

Чтобы получить результаты, как показано, нам понадобятся два разных запроса

SELECT t.id, t.field1, t.field3
  FROM mytable t 
 WHERE ...

и

SELECT t.id, t.field2, t.field4
  FROM mytable t 
 WHERE ...

Мы можем предоставить псевдонимы для выражений в списке SELECT, но опять же, они должны быть указаны в тексте SQL; они не могут быть изменены во время исполнения.

 SELECT t.id, 1 AS field2, 1 AS field4 
   FROM mytable t 
  WHERE ...

Но нам все равно потребуется другой текст SQL для возврата field1 и field3.


Похоже, есть 2 ^ 4 (1 + 4 + 6 + 4 + 1) возможных комбинаций поля 1..4, которые могут быть заполнены. Всего 16 возможных списков SELECT.

Мы могли бы выполнить предварительный запрос, чтобы выяснить, какое поле N должно быть возвращено, и использовать результат этого запроса для формулировки текста второго запроса.

Но необходимая для этого ригмарола кажется неоправданной.

0 голосов
/ 03 мая 2018

Вы должны использовать условие WHERE для выбора значений. учитывая имя таблицы как Table1.

SELECT * FROM Table1 WHERE ID = 1

Если вы хотите выбрать один из нескольких идентификаторов, вы можете использовать предложение IN.

SELECT * FROM Table1 WHERE ID IN (1,2)

если вы хотите просто Field1, Field3, просто упомяните их в запросе SELECT. Вам не нужно *, что соответствует всем полям.

SELECT Field1, Field3 FROM Table1 WHERE ID = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...