SQL условный SELECT
Я хотел бы создать хранимую процедуру с параметрами, указывающими, какие поля должны быть выбраны.
например. Я хотел бы передать два параметра "selectField1" и "selectField2" каждый как bools.
Тогда я хочу что-то вроде
SELECT
if (selectField1 = true) Field1 ELSE do not select Field1
if (selectField2 = true) Field2 ELSE do not select Field2
FROM Table
Спасибо
Карл
Ответы
Ответ 1
Похоже, что они хотят вернуть только разрешенные поля, что означает, что количество возвращенных полей также должно быть динамическим. Это будет работать с 2 переменными. Все, что больше, будет запутывать.
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)
Ответ 2
В SQL
вы делаете это следующим образом:
SELECT CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM Table
Реляционная модель не предполагает динамического подсчета полей.
Вместо этого, если вам не интересно значение поля, вы просто выберите NULL
вместо этого и проанализируйте его на клиенте.
Ответ 3
Вы хотите CASE
statement:
SELECT
CASE
WHEN @SelectField1 = 1 THEN Field1
WHEN @SelectField2 = 1 THEN Field2
ELSE NULL
END AS NewField
FROM Table
EDIT: Мой пример - объединение двух полей в одно поле, в зависимости от параметров. Это решение one-or-none (не оба). Если вы хотите иметь оба поля в выходе, используйте решение Quassnoi.
Ответ 4
@selectField1 AS bit
@selectField2 AS bit
SELECT
CASE
WHEN @selectField1 THEN Field1
WHEN @selectField2 THEN Field2
ELSE someDefaultField
END
FROM Table
Это то, что вы ищете?
Ответ 5
Это простой способ сделать это
IF (selectField1 = true)
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table
Ответ 6
что вы хотите:
MY_FIELD=
case
when (selectField1 = 1) then Field1
else Field2
end,
в выборе
Однако, разве вы просто не показываете этот столбец в своей программе?
Ответ 7
Способ noob для этого:
SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE
Вы можете правильно управлять этой информацией на языке программирования, только используя if-else.
Пример в ASP/JavaScript
// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
do_the_stuff_a();
}
if (rs("field2")) {
do_the_stuff_b();
}
rs.MoveNext();