SQL - 当我的搜索没有返回搜索条件的结果时返回默认值

时间:2018-05-31 19:26:34

标签: sql sql-server mssql-jdbc

我正在搜索查询      - 代码格式

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 :(得分:3)

--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

答案 1 :(得分:2)

怎么样:

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)
);

555566667777是默认行,以防没有符合条件的行。

答案 2 :(得分:2)

如果不存在(从MYTABLE中选择1,其中SWITCH IN(1,2,3)) 选择 default_value

答案 3 :(得分:2)

这是解决这个问题的一种方法。您需要一个要查看的SWITCH值表。然后一个简单的左连接使这非常容易。

select ColA
    , ColB
    , ColC
    v.Switch
from
(
    values
    (1)
    , (2)
    , (3)
)v (Switch)
left join YourTable yt on yt.Switch = v.Switch

答案 4 :(得分:2)

您可以使用如下所示的拆分功能和左连接:

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个参数的分割函数 - Delimeter分隔字符串和分隔符并输出表格。

答案 5 :(得分:1)

编辑: 鉴于新的解释,我完全改变了答案。我想我现在有了你的问题:

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可能假设的所有可能值。 E.g:

SELECT DISTINCT SWITCH FROM another_table_with_all_switches

如果所有想要的是不在MYTABLE中的switch的值,而不是具有空值的整个表,则可以尝试:

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)