Case statement to determine if I should union

我的梦境 提交于 2019-12-23 07:57:54

问题


I currently want to do some sort of conditional union. Given the following example:

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

Say I wanted to only union the second statement if the count of 'users' was >=2 , otherwise do not union the two.

In summary I want to append a table with a row if the table only has 2 or more values.


回答1:


You could use an ugly hack something like this, but I think Tim's answer is better:

SELECT  age, name
FROM    users
UNION ALL

SELECT 25 AS age, 'Betty' AS name
WHERE (SELECT COUNT(*) FROM users) > 1



回答2:


If it's in a stored-procedure you could use 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

Otherwise you could try something like this:

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

Note that i've used UNION ALL since it doesn't seem that you want to eliminate duplicates.

Played around here: http://sqlfiddle.com/#!6/a7540/2323/0

Edit: Instead of my second approach i prefer Zohar's. So if you can use If....Else prefer that otherwise WHERE (SELECT COUNT(*) FROM users) > 1 without a table.




回答3:


Something like the following should work:

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

Second part of UNION ALL will be NULL in case users table has less than 2 records.




回答4:


SELECT age
     , name
FROM   users

UNION

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


来源:https://stackoverflow.com/questions/30326880/case-statement-to-determine-if-i-should-union

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!