MS SQL选择案例查询true或false然后执行另一个SELECT查询

时间:2017-06-28 15:57:30

标签: sql case sql-server-2014

嘿所有我想要找出一种从以下SQL查询发送 2个结果表的方法:

SELECT
  CASE WHEN EXISTS 
  (
      SELECT name FROM usersTbl WHERE name = 'Bob Barker' 
  ) 
  THEN 'TRUE'
  ELSE 'FALSE'
END AS result1

|result1  |
|---------|
| TRUE    |

现在上面的查询工作得很好。但是,我需要执行另一个选择语句,如果它的' TRUE' 是这样的:

SELECT
  CASE WHEN EXISTS 
  (
      SELECT * FROM usersTbl WHERE name = 'Bob Barker' 
  ) 
  THEN 'TRUE'
      (SELECT name FROM usersTbl WHERE name = 'Bob Barker'
                              AND active = 1) AS result2
  ELSE 'FALSE'
END AS result1

|result1  |
|---------|
| TRUE    |

|result2       |
|--------------|
| Bob Barker   |

因此,不再只是 result1 返回,这将允许返回 result1和result2

我该如何格式化查询呢?

3 个答案:

答案 0 :(得分:0)

您查询看起来有点错误......应该是

{{1}}

答案 1 :(得分:0)

有点奇怪,但如果你想要2个结果集,你可以使用IF EXISTS()

IF EXISTS (SELECT * FROM usersTbl WHERE name = 'Bob Barker')
BEGIN
    SELECT 'TRUE' as Result1;
    SELECT CASE WHEN EXISTS (SELECT * 
                             FROM usersTbl 
                             WHERE name = 'Bob Barker'
                             AND active = 1)
                THEN (SELECT name
                      FROM usersTbl 
                      WHERE name = 'Bob Barker'
                      AND active = 1)
                ELSE 'FALSE'
                END as Result2;
END

如果您想在第一个结果不存在时返回FALSE,则必须添加另一个IF

IF NOT EXISTS (SELECT * FROM usersTbl WHERE name = 'Bob Barker')
BEGIN
   SELECT 'FALSE';
END

修改:最终FALSE的完整查询:

IF EXISTS (SELECT * FROM usersTbl WHERE name = 'Bob Barker')
BEGIN
    SELECT 'TRUE' as Result1;
    SELECT CASE WHEN EXISTS (SELECT * 
                             FROM usersTbl 
                             WHERE name = 'Bob Barker'
                             AND active = 1)
                THEN (SELECT name
                      FROM usersTbl 
                      WHERE name = 'Bob Barker'
                      AND active = 1)
                ELSE 'FALSE'
                END as Result2;
END

IF NOT EXISTS (SELECT * FROM usersTbl WHERE name = 'Bob Barker')
BEGIN
   SELECT 'FALSE' as Result1;
END

答案 2 :(得分:0)

这可能适合你。

SELECT 
    *
FROM subTable1
WHERE
    st.value = 'Value'
    AND st.restrictiveValue = 'restrictiveValue'
    AND (SELECT COUNT(*) AS resultCount FROM subTable1 st WHERE st.value = 'Value') != 0

SELECT COUNT(*) AS resultCount FROM subTable1 st WHERE st.value = 'Value'

如果您不希望它返回空表,您可能需要查看this question.中提到的动态SQL