2

私が思うシンプルなもの。

アイテムの長さを表示するクエリがあります。

クエリ:

select length from vw_OutstandingVsInStock1 OVI
LEFT JOIN Departments DEP
on OVI.Department COLLATE DATABASE_DEFAULT=DEP.Description
where OutstandingVolume>0.39 

これにより、次のような結果が返されます。

0.9
1.2
1.5
1.8
2.1
2.4
2.7
3.0
3.3
3.6...

3.0のように表示させたい場合3

したがって、10 進数値がない場合は、10 進数なしで表示intします。小数が存在する場合、小数を 1 桁まで表示しますか?

望ましい出力は3and6の代わりに3.0andです6.0

MSSQL 2012 を使用しています。

4

4 に答える 4

5

別のバリアント ( Fiddle )

;WITH vw_OutstandingVsInStock1 (length)
     AS (SELECT 0.9 UNION ALL
         SELECT 1.2 UNION ALL
         SELECT 1.5 UNION ALL
         SELECT 1.8 UNION ALL
         SELECT 2.1 UNION ALL
         SELECT 2.4 UNION ALL
         SELECT 2.7 UNION ALL
         SELECT 3.0 UNION ALL
         SELECT 3.3 UNION ALL
         SELECT 3.6)
SELECT IIF(length % 1 = 0,
           CAST(length AS INT),
           CAST(length AS SQL_VARIANT))
FROM   vw_OutstandingVsInStock1 
于 2013-07-10T11:10:42.260 に答える
2

なぜだめですか

select cast(length as float) from vw_OutstandingVsInStock1 OVI
...

それはあなたの問題を解決しますか?

于 2013-07-10T13:29:04.577 に答える
1

現時点では、これよりもきれいなものは考えられません。リテラル値を CTE に配置しました。そこに既存のクエリを配置します。

;With rowss(length) as (
select 0.9 union all select 1.2 union all select 1.5 union all select
       1.8 union all select 2.1 union all select 2.4 union all select
       2.7 union all select 3.0 union all select 3.3 union all select
       3.6
)
select
    STUFF(stLength,CHARINDEX('.',stLength),
        CASE WHEN stLength like '%.0' THEN 2 ELSE 0 END,'')
from
    (select CONVERT(varchar(10),length) as stLength from rowss) t

秘訣はSTUFF、文字列の末尾に基づいて、2 文字を削除するか何もしないかを決定することです。

結果:

0.9
1.2
1.5
1.8
2.1
2.4
2.7
3
3.3
3.6
于 2013-07-10T11:02:45.400 に答える