tsql:如果存在且交叉连接问题

时间:2015-09-17 00:27:17

标签: sql sql-server tsql

我有一点问题:

void Function(VARIANT FAR* pVal)
    { 

       VariantInit(pVal);
       VariantInit(pVal->pvarVal);

       pVal->vt = VT_VARIANT | VT_BYREF ;

        __int64 biNewVal =  // Some logic here
        pVal->pvarVal->vt = VT_CY;
        pVal->pvarVal->cyVal.int64 = biNewVal;

    }


int _tmain(int argc, _TCHAR* argv[])
{
    VARIANT var;    
    Function(&var);
    return 0;
}

除了上面的预期结果,我还需要查看值' test1'存在,如果没有,则输出值“无”'在它的位置。我正在连接到Microsoft SQL 2012服务器。到目前为止,这是我的代码:

Table   
Name: Table_test
       -------
Column: test
       -------
        test1
        test2 
        test3

Required Results
  test  |  test
 --------------
  test1 | test2

IF EXIST ... ELSE部分不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您并不关心如何从给定的表中获得所需的结果,因此可以实现您的目标的更简单的非平凡查询之一是

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'

没有加入,但你不需要一个人来达到预期的效果。请特别注意CASE 表达式 - 这会产生一个值,在这种情况下是' test1'或者没有'。相反,IF引入了一个tsql控件语句,它不会产生值。您可以在存储过程的实现中使用IF语句,但通常不在查询中。