我有一个小问题:
Table
Name: Table_test
-------
Column: test
-------
test1
test2
test3
Required Results
test | test
--------------
test1 | test2
除了上面的预期结果外,我还需要查看值'test1'是否存在,如果不存在,则在其位置输出值'NONE'。我正在连接到微软SQL 2012服务器。下面是我到目前为止的代码:
SELECT a.test, b.test FROM (
IF EXISTS
(SELECT test FROM Table_test WHERE test='test1')
SELECT test FROM Table_test WHERE test='test1'
ELSE
SELECT test='NONE') a
CROSS JOIN
(SELECT test FROM Table_test WHERE test='test2') b;
IF EXIST…ELSE部分不起作用。
由于您不关心如何从给定的表中获得所需的结果,因此可以实现您的目标的更简单的重要查询之一是
SELECT *
FROM
Table_test a
CROSS JOIN Table_test b
WHERE a.test = 'test1' AND b.test = 'test2'
当然,很难看出这是如何推广到一个实际问题的,但这更多的是问题的特征,而不是答案的特征。
编辑添加:
要满足您的额外需求,您可以这样做:
SELECT
CASE
WHEN EXISTS(SELECT 1 from Table_test WHERE test = 'test1') THEN 'test1'
ELSE 'NONE'
END test,
*
FROM
Table_test
WHERE test = 'test2'
里面没有join,但是你不需要join来达到想要的结果。特别注意CASE
表达式——它产生一个值,在本例中是'test1'或'NONE'。相反,IF
引入了一个tsql控制语句,该语句不产生值。您可以在存储过程的实现中使用IF
语句,但通常不会在查询中使用。