Условный ВЫБОР SQL

var ColorEnum = {
    red: {},
    green: {},
    blue: {}
}

Вам не нужно следить за тем, чтобы таким образом не назначать повторяющиеся числа различным значениям перечисления. Новый объект создается и присваивается всем значениям перечисления.

32
задан jitter 24 June 2009 в 13:44
поделиться

6 ответов

Похоже, они хотят иметь возможность возвращать только разрешенные поля, что означает, что количество возвращаемых полей также должно быть динамическим . Это будет работать с двумя переменными. Что-то большее, чем это, запутается.

IF (selectField1 = true AND selectField2 = true)
BEGIN
   SELECT Field1, Field2
   FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
   SELECT Field1
   FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
   SELECT Field2
   FROM Table
END

Динамический SQL поможет с кратными. В этом примере предполагается, что хотя бы 1 столбец является истинным.

DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
   SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
   SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)

SET @sql = @sql + ' FROM Table'

EXEC(@sql)
10
ответ дан 27 November 2019 в 19:59
поделиться

В SQL это делается следующим образом:

SELECT  CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
        CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM    Table

Реляционная модель не предполагает динамического подсчета полей.

Вместо этого, если вас не интересует поле значение, вы просто выбираете NULL и анализируете его на клиенте.

59
ответ дан 27 November 2019 в 19:59
поделиться

Вам нужен оператор CASE :

SELECT
  CASE 
    WHEN @SelectField1 = 1 THEN Field1
    WHEN @SelectField2 = 1 THEN Field2
    ELSE NULL
  END AS NewField
FROM Table

РЕДАКТИРОВАТЬ: Мой пример предназначен для объединения двух полей в одно поле в зависимости от предоставленных параметров. Это решение "один или ни один" (но не оба). Если вы хотите, чтобы в выходных данных были оба поля, используйте решение Quassnoi.

22
ответ дан 27 November 2019 в 19:59
поделиться

Это псевдо-способ сделать это

IF (selectField1 = true) 
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table
0
ответ дан 27 November 2019 в 19:59
поделиться

вам нужно:

    MY_FIELD=
        case 
            when (selectField1 = 1) then Field1
                                 else Field2        
        end,

в списке выбора

Но разве вы просто не показываете этот столбец в своей программе?

0
ответ дан 27 November 2019 в 19:59
поделиться
@selectField1 AS bit
@selectField2 AS bit

SELECT
CASE 
    WHEN @selectField1 THEN Field1
    WHEN @selectField2 THEN Field2
    ELSE someDefaultField
END
FROM Table

Это то, что вы ищете?

2
ответ дан 27 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: