1

私はSQL TABLE Aによって生成された次のテーブルを持っています

timeinterval   count(exclusive range)
0-6             2
0-12            5
0-18            10

このテーブル B のようなテーブルが欲しい

timeinterval   count(exclusive range)  count(inclusive range)
1-6             2                       2
1-12            5                       3
1-18            10                      5

私はすでにテーブル A を生成しており、テーブル B が必要です。テーブル A のコードにクエリを追加し、テーブルの 2 行目に対して (0-12)-(0-6) のようなことを SQL で行うことはできますか? B.

テーブルAを生成するために使用されるコードは

with ranges as 
  (
    select 6 as val, 1 as count_all
 union all
    select 12, 1
    union all
    select 18, 1
    union all
 select 24, 1
    union all
 select 30, 1
    union all  
 select 36, 1
    union all 
 select 42, 1
    union all
 select 48, 1
    union all   
 select 1, 0
  )
select case when ranges.count_all = 0
            then 'more'
            else  convert (varchar(10), ranges.val) 
        end [MetLifeExperienceMonths],
       sum (case when (ranges.count_all = 0 and GoldListHistogram.MetLifeExperienceMonths>=1)
                   or
           (GoldListHistogram.MetLifeExperienceMonths<= ranges.val and  GoldListHistogram.MetLifeExperienceMonths>=1)
                 then 1 end) [count],
count(EmployeeID) as 'Total'
into yy
from GoldListHistogram
cross join ranges
where MetLifeExperienceMonths > 0
group by ranges.val, ranges.count_all

2行目から始まるすべての行の「カウント(排他的範囲)」の最初の2行の値を減算できるように、クエリを変更する必要があります..0-12(時間間隔)行のように、値を出力する必要があります行(i)=カウント(i)-カウント(i-1)のように、最初の2行の差です。

最初の列は 5 年 (月単位) の時間間隔を示し、2 番目の列は no を計算します。(0-6,0-12,0-18)..6 ,12,18 のような排他的範囲内の従業員の数はありません。月の 3 番目の列は no を計算します。(0-6,6-12,12-18) のような排他的範囲の従業員の数

4

1 に答える 1

0

範囲に開始値を追加することはできませんか? 何かのようなもの:


with ranges as 
  (
    select 6 as val, 0 as start, 1 as count_all
 union all
    select 12, 7, 1
    union all
    select 18, 13, 1
    union all
 select 24, 19, 1
    union all
 select 30, 25, 1
    union all  
 select 36, 31, 1
    union all 
 select 42, 37, 1
    union all
 select 48, 43, 1
    union all   
 select 1, 49, 0
  )
select case when ranges.count_all = 0
            then 'more'
            else  convert (varchar(10), ranges.val) 
        end [MetLifeExperienceMonths],
       sum (case when (ranges.count_all = 0 and GoldListHistogram.MetLifeExperienceMonths>=1)
                   or
           (GoldListHistogram.MetLifeExperienceMonths=1)
                 then 1 else 0 end) [count inclusive],
       sum (case when (ranges.count_all = 0 and GoldListHistogram.MetLifeExperienceMonths>=1)
                   or
           (GoldListHistogram.MetLifeExperienceMonths=ranges.start)
                 then 1 else 0 end) [count exclusive],
count(EmployeeID) as 'Total'
into yy
from GoldListHistogram
cross join ranges
where MetLifeExperienceMonths > 0
group by ranges.val, ranges.count_all;

于 2012-09-27T08:24:40.290 に答える