确定我是否应该联合的案例陈述

Case statement to determine if I should union

我目前想做某种条件联合。给定以下示例:

SELECT  age, name
FROM    users
UNION
SELECT  25 AS age, 'Betty' AS name

假设我只想在 'users' 的计数为 >=2 时合并第二个语句,否则不要合并这两个语句。

总而言之,如果 table 只有 2 个或更多值,我想在 table 后附加一行。

如果它在存储过程中,您可以使用 If...Else:

IF (SELECT COUNT(*) FROM users) < 2
 BEGIN
  SELECT  age, name
  FROM    users
  END
ELSE
  SELECT  age, name
  FROM    users
  UNION ALL
  SELECT  25 AS age, 'Betty' AS name

否则你可以尝试这样的事情:

SELECT  age, name
  FROM    users
  UNION ALL
  SELECT  TOP 1 25 AS age, 'Betty' AS name
  FROM users
  WHERE (SELECT COUNT(*) FROM users) >= 2

请注意,我使用了 UNION ALL,因为您似乎不想消除重复项。

在这里玩过:http://sqlfiddle.com/#!6/a7540/2323/0

编辑:我更喜欢 而不是我的第二种方法。因此,如果您可以使用 If....Else,则更喜欢 WHERE (SELECT COUNT(*) FROM users) > 1 而不使用 table。

你可以使用 一个丑陋的 hack 这样的东西,但我认为 更好:

SELECT  age, name
FROM    users
UNION ALL

SELECT  25, 'Betty'
WHERE (SELECT COUNT(*) FROM users) > 1;

像下面这样的东西应该可以工作:

SELECT  age, name
FROM    users

UNION ALL

SELECT age, name
FROM (SELECT  25 AS age, 'Betty' AS name) x
CROSS APPLY (SELECT COUNT(*) FROM users) y(cnt)
WHERE y.cnt >= 2

如果 users table 少于 2 条记录,UNION ALL 的第二部分将是 NULL

SELECT age
     , name
FROM   users

UNION

SELECT 25 As age
     , 'Betty' As name
WHERE  EXISTS (
         SELECT Count(*)
         FROM   users
         HAVING Count(*) >= 2
       )
;