SQL - возвращает значение по умолчанию, когда мой поиск не возвращает результатов вместе с критериями поиска. - PullRequest
0 голосов
/ 31 мая 2018

Я ищу по запросу - Формат кода

SELECT COLA,COLB,COLC from MYTABLE where SWITCH IN (1,2,3);

Если MYTABLE не содержит строк с SWITCH 1,2 или 3, мне нужны значения по умолчанию, возвращаемые вместе с SWITCHзначение.Как мне это сделать?

Ниже приведен формат моей таблицы

COLA | COLB | COLC | SWITCH
------------------------------
A       B      C        1
a       b      c        2

Я хочу запрос при поиске с помощью

select * from MYTABLE where switch in (1,2,3)

, который приводит к таким результатам -

COLA | COLB | COLC | SWITCH
------------------------------
A       B      C        1
a       b      c        2
NA      NA     NA       3

Ответы [ 6 ]

0 голосов
/ 01 июня 2018

Вы можете использовать функцию разделения и левое объединение, как показано ниже:

Select ISNULL(ColA,'NA') As ColA,ISNULL(ColB,'NA') As ColB,ISNULL(ColC,'NA') As ColC,ISNULL(Switch,a.splitdata) 
from [dbo].[fnSplitString]('1,2,3',',') a
LEFT JOIN #MYTABLE t on a.splitdata=t.Switch

[dbo]. [FnSplitString] - это функция разделения с 2 аргументами - строка, разделенная разделителем, иДелиметр и вывод таблицы.

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

Вот один из способов решения этой проблемы.Вам нужна таблица значений SWITCH, на которую вы хотите посмотреть.Тогда простое левое соединение делает это супер простым.

select ColA
    , ColB
    , ColC
    v.Switch
from
(
    values
    (1)
    , (2)
    , (3)
)v (Switch)
left join YourTable yt on yt.Switch = v.Switch
0 голосов
/ 31 мая 2018

РЕДАКТИРОВАТЬ: Учитывая новое объяснение, я полностью изменил ответ.Я думаю, что получил ваш вопрос сейчас:

SELECT * FROM MYTABLE AS mt
RIGHT JOIN (SELECT 1 AS s UNION SELECT 2 AS s UNION SELECT 3 AS s) AS st
ON st.s = mt.SWITCH

Вы можете изменить часть SELECT 1 AS s UNION SELECT 2 AS s UNION SELECT 3 AS s на подзапрос, который приведет ко всем возможным значениям, которые SWITCH может принять.Например:

SELECT DISTINCT SWITCH FROM another_table_with_all_switches

Если все, что нужно, это значение параметра, который не находится в MYTABLE, а не вся таблица с нулевыми значениями, вы можете попробовать:

SELECT * FROM
(SELECT 1 AS s UNION SELECT 2 AS s UNION SELECT 3) AS st
WHERE st.s NOT IN (SELECT DISTINCT SWITCH FROM MYTABLE)
0 голосов
/ 31 мая 2018
--Check to see if any row exists matching your conditions
IF NOT EXISTS (SELECT COLA,COLB,COLC from MYTABLE where SWITCH IN (1,2,3))
     BEGIN
         --Select your default values
     END
ELSE
     BEGIN
        --Found rows, return them
        SELECT COLA,COLB,COLC from MYTABLE where SWITCH IN (1,2,3)
     END
0 голосов
/ 31 мая 2018

если не существует (ВЫБЕРИТЕ 1 из MYTABLE, где SWITCH IN (1,2,3)) выберите default_value

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

Как насчет:

SELECT COLA,COLB,COLC from MYTABLE where SWITCH IN (1,2,3)
union select 5555, 6666, 7777 where not exists (
  SELECT COLA,COLB,COLC from MYTABLE where SWITCH IN (1,2,3)
);

5555, 6666, 7777 - строки по умолчанию, если нет строк, соответствующих вашим критериям.

...