我正在搜索查询 - 代码格式
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
答案 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)
);
5555
,6666
,7777
是默认行,以防没有符合条件的行。
答案 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)