1

SQL 内で、基準を満たす場合にのみ列を選択できますか?

IF p.Amount != 0.0 
    { select p.Amount from Price p } 

これは、0.0 を超える値がある場合に列が表示されないようにフィルター処理するために使用される、はるかに大きな SQL の一部です。

4

5 に答える 5

4

SQL 基準は、列ではなく行を選択するために使用されます。一般に、特定のクエリに対して常に同じ列を選択し、後でビュー ロジックを使用してそれらを表示するかどうかを選択すると、作業が楽になることがわかりました。

于 2013-01-18T13:42:15.587 に答える
0

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
于 2013-01-18T13:42:21.420 に答える
0

まったく見えないようにしたいですか?または、その中に他の定義済みの値を表示するだけですか? 列をまったく表示したくないが、場合によってのみ表示したい場合は、それを行うことができないためです。ただし、それで十分な場合は、列に別の結果を返すことができます。使用ケース:

SELECT 
  CASE WHEN p.amount< 700 THEN p.amount
ELSE 0
END
FROM Price p;
于 2013-01-18T13:51:56.110 に答える
0

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 クエリは列を定義し、動的に構成可能な列はありません。

于 2013-01-18T15:51:14.607 に答える
-1

SQL Server で IFF 関数を使用できます。

SELECT IIF(p.Amount != 0.0 ) as amount

FROM price p
于 2013-01-18T13:50:21.820 に答える