Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 对不起,我必须更明确一点,不要把一半的问题记在心里。让我重新开始。当前,您的示例包含作业3的一行,时间在2月之前。您的要求规定了转到New列的百分比。相应的Old值显示为0,我试图为自己澄清为什么在本例中它是0。是否因为源中的单个数据行的日期在2月之前(即_Sql Server 2008 - Fatal编程技术网

Sql server 2008 对不起,我必须更明确一点,不要把一半的问题记在心里。让我重新开始。当前,您的示例包含作业3的一行,时间在2月之前。您的要求规定了转到New列的百分比。相应的Old值显示为0,我试图为自己澄清为什么在本例中它是0。是否因为源中的单个数据行的日期在2月之前(即

Sql server 2008 对不起,我必须更明确一点,不要把一半的问题记在心里。让我重新开始。当前,您的示例包含作业3的一行,时间在2月之前。您的要求规定了转到New列的百分比。相应的Old值显示为0,我试图为自己澄清为什么在本例中它是0。是否因为源中的单个数据行的日期在2月之前(即,sql-server-2008,Sql Server 2008,对不起,我必须更明确一点,不要把一半的问题记在心里。让我重新开始。当前,您的示例包含作业3的一行,时间在2月之前。您的要求规定了转到New列的百分比。相应的Old值显示为0,我试图为自己澄清为什么在本例中它是0。是否因为源中的单个数据行的日期在2月之前(即规定的期限之前)?还是仅仅因为它是一行,即它没有前置行。。。因此,同样,如果存在一个(另一个)作业3行,日期值早于2013年1月15日(当前作业3行也保留在集合中),则作业3的旧必须保留0,还是需要显示另一行的完成百分比?(我在这里假设,New


对不起,我必须更明确一点,不要把一半的问题记在心里。让我重新开始。当前,您的示例包含作业3的一行,时间在2月之前。您的要求规定了转到
New
列的百分比。相应的
Old
值显示为0,我试图为自己澄清为什么在本例中它是0。是否因为源中的单个数据行的日期在2月之前(即规定的期限之前)?还是仅仅因为它是一行,即它没有前置行。。。因此,同样,如果存在一个(另一个)作业3行,
日期
值早于
2013年1月15日
(当前作业3行也保留在集合中),则作业3的
必须保留
0
,还是需要显示另一行的
完成百分比
?(我在这里假设,
New
无论如何仍然是5。)为了节省时间,我当前的解决方案将是
Old
(如果前面没有行,则为0,如您当前的示例中所示)@然而,伊恩·普雷斯顿的解决方案仍然是可行的。(我希望Ian收到有关此评论的通知,以提醒其解决方案可能存在的问题。尽管我们双方仍需要您澄清这是否是一个问题。)感谢您的工作。我会在本周初仔细查看它,并让你知道它是如何工作的。我没有把它拆开来找出原因,但它似乎从大约1500个不同的工作表中跳过了大约100个工作。不过,感谢您的帮助。它可能会跳过新的作业,即在报告月份之后首次登录的作业。无论如何,如果你想继续前进,我理解。此外,您接受的解决方案比我的更短/更简单,因此可能更易于维护。即使是这样,你也必须对它感到满意(大概是次要的)。
Job      Date         Percent_complete
---      ----         ----------------
1        1/5/2013     5
2        1/10/2013    5
2        1/25/2013    15
2        2/15/2013    25
3        2/15/2013    5
1        2/10/2013    10
1        2/23/2013    20
1        2/24/2013    18
4        1/12/2013    40
Job   Old    New
---   ---    ---
1     5      18
2     15     25
3     0      5
4     40     40
with max_percent as
(
  select Job
    , [Max] = max(Percent_complete)
  from jobs
  where [Date] between '2/1/2013' and '2/28/2013'
  group by Job
),
min_percent as
(
  select Job
    , [Max] = max(Percent_complete)
  from jobs
  where [Date] < '2/1/2013'
  group by Job
)
select Job = coalesce(mn.Job, mx.Job)
  , [Min] = case when mx.Job is not null then mn.[Max] else 0 end
  , [Max] = coalesce(mx.[Max], mn.[Max], 0)
from max_percent mx
  full join min_percent mn on mx.Job = mn.Job
order by Job
with jobList as
(
  select distinct Job from jobs
)
select Job
  , [Min] = isnull(case when mx.[Max] is not null then mn.[Max] else 0 end, 0)
  , [Max] = coalesce(mx.[Max], mn.[Max], 0)

from jobList jl
  outer apply
  (
    select top 1 [Max] = j.Percent_complete
    from jobs j
    where [Date] between '2/1/2013' and '2/28/2013'
      and jl.Job = j.Job
    order by j.[Date] desc
  ) mx
  outer apply
  (
    select top 1 [Max] = j.Percent_complete
    from jobs j
    where [Date] < '2/1/2013'
      and jl.Job = j.Job
    order by j.[Date] desc
  ) mn
order by jl.Job
with jobList as
(
  select distinct Job from jobs
)
select Job
  , [Min] = isnull(mn.[Max], 0)
  , [Max] = coalesce(mx.[Max], mn.[Max], 0)

from jobList jl
  outer apply
  (
    select top 1 [Max] = j.Percent_complete
    from jobs j
    where [Date] between '2/1/2013' and '2/28/2013'
      and jl.Job = j.Job
    order by j.[Date] desc
  ) mx
  outer apply
  (
    select top 1 [Max] = j.Percent_complete
    from jobs j
    where [Date] < '2/1/2013'
      and jl.Job = j.Job
    order by j.[Date] desc
  ) mn
order by jl.Job
Job Date Percent_complete recency --- ---- ---------------- ------- 1 1/5/2013 5 Old 2 1/10/2013 5 Old 2 1/25/2013 15 Old 2 2/15/2013 25 New 3 1/15/2013 5 New 1 2/10/2013 10 New 1 2/23/2013 20 New 1 2/24/2013 18 New 4 1/12/2013 40 Old Job Date Percent_complete recency rnk --- ---- ---------------- ------- --- 1 1/5/2013 5 Old 1 2 1/10/2013 5 Old 2 2 1/25/2013 15 Old 1 2 2/15/2013 25 New 1 3 1/15/2013 5 New 1 1 2/10/2013 10 New 3 1 2/23/2013 20 New 2 1 2/24/2013 18 New 1 4 1/12/2013 40 Old 1 Job Date Percent_complete recency rnk --- ---- ---------------- ------- --- 1 1/5/2013 5 Old 1 2 1/25/2013 15 Old 1 2 2/15/2013 25 New 1 3 1/15/2013 5 New 1 1 2/24/2013 18 New 1 Job Old New --- --- --- 1 5 18 2 15 25 3 0 5
WITH partitioned AS (
  SELECT
    Job,
    Date,
    Percent_complete,
    recency = CASE
      WHEN Date >= '20130201' THEN 'NEW'
      ELSE 'Old'
    END
  FROM atable
  WHERE Date < '20130301'
)
, ranked AS (
  SELECT
    Job,
    Date,
    Percent_complete,
    recency,
    rnk = ROW_NUMBER() OVER (PARTITION BY Job, recency ORDER BY Date DESC)
  FROM partitioned
)
, filtered AS (
  SELECT
    Job,
    Percent_complete,
    recency
  FROM ranked
  WHERE rnk = 1
)
, pivoted AS (
  SELECT
    Job,
    Old = ISNULL(Old, 0),
    New = ISNULL(New, Old)
  FROM filtered
  PIVOT (
    MAX(Percent_complete) FOR recency IN (Old, New)
  ) u
)
SELECT *
FROM pivoted
;