Выберите столбец со значениями больше 0 - PullRequest
2 голосов
/ 25 января 2012

У меня есть база данных предметов с 8 таблицами. Там я хотел написать хранимую процедуру, чтобы выбрать все значения больше 0 для указанного идентификатора элемента. Моя проблема сейчас заключается в том, что оператор возвращает только столбцы, в которых значение указанного элемента больше 0.

В основном я пишу простой выбор, который возвращает следующие данные:

Пример 1 http://i.imagebanana.com/img/rhw2sm9u/1327501679.jpg

Когда столбец «Cold» теперь содержит значение 0, он возвращает ту же структуру, что и выше, но Cold равен 0 вместо 120.

Но если значение Cold равно 0, я не хочу получать этот столбец и отбрасывать его, чтобы получить только оставшиеся значения:

Пример 2 http://i.imagebanana.com/img/dux1gyb8/1327502046.jpg

Я использую MSSQL Management Studio 2008, а база данных - 2008 R2.

Заранее спасибо и извините за мой плохой английский.

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Запрос должен возвращать фиксированный набор столбцов. Нет синтаксиса, позволяющего возвращать некоторые столбцы только условно.

Но вы можете вызвать запрос по условию с помощью оператора IF. Таким образом, вы можете сначала проверить, содержит ли строка, которую вы собираетесь получить, ненулевое значение в Cold. Если это так, вы получаете Cold с другими столбцами, если нет, вы опускаете его:

IF EXISTS (SELECT * FROM YourTable WHERE ItemID = @ItemID AND Cold <> 0)
  SELECT
    ItemID,
    ItemName,
    Cold
  FROM YourTable
  WHERE ItemID = @ItemID
ELSE
  SELECT
    ItemID,
    ItemName
  FROM YourTable
  WHERE ItemID = @ItemID

То есть все определение хранимой процедуры будет выглядеть следующим образом:

CREATE PROCEDURE YourStoredProcedure
  @ItemID int
AS
BEGIN
  IF EXISTS (SELECT * FROM YourTable WHERE ItemID = @ItemID AND Cold <> 0)
    SELECT
      ItemID,
      ItemName,
      Cold
    FROM YourTable
    WHERE ItemID = @ItemID
  ELSE
    SELECT
      ItemID,
      ItemName
    FROM YourTable
    WHERE ItemID = @ItemID
END
0 голосов
/ 25 января 2012

вы должны вернуть «значение» для каждой строки / столбца в наборе результатов. Если вы не хотите получать значения 0, вы можете изменить их на NULL, используя что-то вроде:

SELECT
    NULLIF(YourCol1,0) AS YourCol1, NULLIF(YourCol2,0) AS YourCol2, ....
    FROM ...

или

SELECT
    CASE WHEN YourColumn1>0 THEN YourColumn1 ELSE 0 END AS YourColumn1,
    CASE WHEN YourColumn2>0 THEN YourColumn2 ELSE 0 END AS YourColumn2,
    ...
    FROM ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...