确定我是否应该联合的案例陈述
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
)
;
我目前想做某种条件联合。给定以下示例:
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
)
;