私は現在、ある種の条件付き結合を実行したいと思っています。次の例を考えます。
SELECT age, name
FROM users
UNION
SELECT 25 AS age, 'Betty' AS name
'users'の数が> = 2の場合にのみ、2番目のステートメントを結合したいとします。それ以外の場合は、2つを結合しないでください。
要約すると、テーブルに2つ以上の値しかない場合は、テーブルに行を追加したいと思います。
あなたが使うことができます 醜いハック このようなものですが、私は ティムの答え の方が良いと思います:
SELECT age, name
FROM users
UNION ALL
SELECT 25 AS age, 'Betty' AS name
WHERE (SELECT COUNT(*) FROM users) > 1
ストアドプロシージャにある場合は、_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/
編集:私の2番目のアプローチの代わりに、私は Zohar's を好みます。したがって、_If....Else
_を使用できる場合は、テーブルなしで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
NULL
テーブルのレコード数が2未満の場合、UNION ALL
の2番目の部分はusers
になります。
SELECT age
, name
FROM users
UNION
SELECT 25 As age
, 'Betty' As name
WHERE EXISTS (
SELECT Count(*)
FROM users
HAVING Count(*) >= 2
)
;