2017-03-16 17 views
0

以下の表から一時テーブルを作成したいとします。列の値に基づいて新しい列を一時テーブルに追加する

------------------------|-------- 
Date     | Length 
------------------------|-------- 
2014-08-28 00:00:00.000 | 1.5 
2014-08-28 00:00:00.000 | 2.6 
2014-08-28 00:00:00.000 | 1.5 
2014-08-28 00:00:00.000 | 3.3 
2014-08-28 00:00:00.000 | 1.1 
2014-08-28 00:00:00.000 | 8.5 
2014-08-28 00:00:00.000 | 8.6 
2014-08-28 00:00:00.000 | 11.3 

そして、一時テーブルを次のようにしてください。

Date     | Length | Length_Range 
------------------------|---------|-------------- 
2014-08-28 00:00:00.000 | 1.5 | 1-4 
2014-08-28 00:00:00.000 | 2.6 | 1-4 
2014-08-28 00:00:00.000 | 6.5 | 5-10 
2014-08-28 00:00:00.000 | 3.3 | 1-4 
2014-08-28 00:00:00.000 | 1.1 | 1-4 
2014-08-28 00:00:00.000 | 8.5 | 5-10 
2014-08-28 00:00:00.000 | 8.6 | 5-10 
2014-08-28 00:00:00.000 | 11.3 | 11-15 

[Length_Range]を定義できます。

のMicrosoft SQL Server 2016 互換性レベル:SQL Server 2005の(90)

+0

好奇心の高まりから、「Length」が「4.6」のアイテムの結果はいつですか?あるいは「10.4」? –

+0

@Damien_The_Unbeliever 4.6 = 1-5,10.4 = 11-15 –

答えて

1

使用case

select t.*, 
     (case when length >= 1 and length < 4 then '1-4' 
      when length < 10 then '5-10' 
      when length < 15 then '11-15' 
      else '16+' 
     end) as length_range 
into #temp_t 
from t; 
1
CREATE TABLE #TABLE1 
    ([DATE] DATETIME, [LENGTH] FLOAT) 
INSERT INTO #TABLE1 
    ([DATE], [LENGTH]) 
VALUES 
    ('2014-08-28 00:00:00', 1.5), 
    ('2014-08-28 00:00:00', 2.6), 
    ('2014-08-28 00:00:00', 1.5), 
    ('2014-08-28 00:00:00', 3.3), 
    ('2014-08-28 00:00:00', 1.1), 
    ('2014-08-28 00:00:00', 8.5), 
    ('2014-08-28 00:00:00', 8.6), 
    ('2014-08-28 00:00:00', 1.3) 

SELECT *,CASE 
WHEN LENGTH BETWEEN 1 AND 4 THEN '1-4' 
WHEN LENGTH BETWEEN 5 AND 10 THEN '5-10' 
WHEN LENGTH BETWEEN 11 AND 15 THEN '11-15' END AS LENGHT_RANGE 
FROM #TABLE1 

Date     Length LENGHT_RANGE 
2014-08-28 00:00:00.000 1.5   1-4 
2014-08-28 00:00:00.000 2.6   1-4 
2014-08-28 00:00:00.000 1.5   1-4 
2014-08-28 00:00:00.000 3.3   1-4 
2014-08-28 00:00:00.000 1.1   1-4 
2014-08-28 00:00:00.000 8.5   5-10 
2014-08-28 00:00:00.000 8.6   5-10 
2014-08-28 00:00:00.000 1.3   1-4 
0

OUTPUTこの

を助ける--May
;WITH cte (
    [Date] 
    ,[Length] 
    ) 
AS (
    SELECT cast('2014-08-28 00:00:00.000' AS DATETIME) 
     ,CAST('1.5' AS DECIMAL(4, 2)) 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'2.6' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'1.5' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'3.3' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'1.1' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'8.5' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'8.6' 

    UNION ALL 

    SELECT '2014-08-28 00:00:00.000' 
     ,'11.3' 
    ) 
SELECT * 
    ,CASE 
     WHEN Length < 1 
      THEN '< 1' 
     WHEN Length BETWEEN 1 
       AND 4 
      THEN '1-4' 
     WHEN Length BETWEEN 5 
       AND 10 
      THEN '5-10' 
     WHEN Length BETWEEN 11 
       AND 15 
      THEN '11-15' 
     WHEN Length > 15 
      THEN '> 15' 
     END AS Length_Range 
FROM cte 
0

私はあなたの質問を理解しています。あなたの答えは次のリンクですでに利用可能です。

Click here

だから、このリンクを参照し、詳細を取得。

関連する問題