SQL 内で、基準を満たす場合にのみ列を選択できますか?
IF p.Amount != 0.0
{ select p.Amount from Price p }
これは、0.0 を超える値がある場合に列が表示されないようにフィルター処理するために使用される、はるかに大きな SQL の一部です。
SQL 内で、基準を満たす場合にのみ列を選択できますか?
IF p.Amount != 0.0
{ select p.Amount from Price p }
これは、0.0 を超える値がある場合に列が表示されないようにフィルター処理するために使用される、はるかに大きな SQL の一部です。
SQL 基準は、列ではなく行を選択するために使用されます。一般に、特定のクエリに対して常に同じ列を選択し、後でビュー ロジックを使用してそれらを表示するかどうかを選択すると、作業が楽になることがわかりました。
CASE
ステートメントを使用する必要があります。Transact-SQL - ケース
USE AdventureWorks2012;
GO
SELECT ProductNumber, Category =
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;
GO
まったく見えないようにしたいですか?または、その中に他の定義済みの値を表示するだけですか? 列をまったく表示したくないが、場合によってのみ表示したい場合は、それを行うことができないためです。ただし、それで十分な場合は、列に別の結果を返すことができます。使用ケース:
SELECT
CASE WHEN p.amount< 700 THEN p.amount
ELSE 0
END
FROM Price p;
0.0 より大きい値のみを表示する場合は、where
句を使用できます。
select p.amount
from t
where p.amount > 0
正でない値を表示し、残りを空白 (NULL) にしたい場合は、次のようにします。
select (case when p.amount > 0 then p.amount end)
from t
すべての値が 0 より大きい場合にのみ行を返したい場合は、次の 1 つの方法があります。
select p.amount
from (select t.*,
sum(case when p.amount > 0 then 1 else 0 end) over () as Pgt0
count(*) over () as cnt
from t
) t
where Pgt0 = cnt
たとえば、すべての値が同じ場合に実際に列を削除したい場合は、より複雑な式が必要です。SQL SELECT クエリは列を定義し、動的に構成可能な列はありません。
SQL Server で IFF 関数を使用できます。
SELECT IIF(p.Amount != 0.0 ) as amount
FROM price p