特殊情况记录计数

时间:2013-01-11 06:24:51

标签: sql-server-2008

我被要求提供一份计算土地类型的报告。问题是如果有问题的地块有多种类型的土地,那么计数就是去那个拥有最大市场并忽略重置的土地部分。这些表格有助于显示我正在使用的内容,然后显示所需的输出。

    TRMaster Table
Year  Parcel   District
2012  0-0-12   1
2012  0-0-15   1
2012  0-0-20   3

TRValue Table
Year Parcel    PropCode    Market
2012  0-0-12      LC01     10,000
2012  0-0-12      LR01     25,000
2012  0-0-15      LA01     30,000
2012  0-0-15      LS01     28,000
2012  0-0-20      LR01     13,000
2012  0-0-20      LS01     15,000
2012  0-0-20      LS02     18,000

TRProp Table
PropCode    tc233    PropType
LA01           1         A
LC02           3         A
LR01           2         A
LS01           4         A
LS02           4

Desired Output
District tc233    Count
1         1        1    (from 0-0-15 LA01)
1         2        1    (from 0-0-12 LR01)
3         4        1    (from 0-0-20 LS02)

以下查询已关闭,但由于p.tc233上的MIN子句而无效。当然,它返回TRValue中包裹的每组记录的最小p.tc233值!

Select  m.District, MIN(p.tc233), MAX(v1.currentmarket), COUNT(*)
  from trvalue v
 inner join TRProp P on 
       p.code = v.Code and p.PropType = 'A'
 inner join TRMaster m on 
       m.Year = v.Year and m.Parcel = v.parcel and m.Deleted = 0
 where v.Year = 2012 
 group by m.district, p.tc233
having MAX(v.currentmarket) > 0
 order by m.district, p.tc233

我在想一个或两个子选择是必要的!如果需要更多信息,请询问,我将尽我所能。

任何想法都表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:1)

这给出了你所需的结果,但我不确定它是完全正确的:

;With RatedMarkets as (
   select *,ROW_NUMBER() OVER (PARTITION BY Parcel ORDER BY Market desc) as rn
  from TRValue
)
select
  m.District,
  p.tc233,
  COUNT(*)
from
  TRMaster m
    inner join
  RatedMarkets rm
    on
      m.Parcel = rm.Parcel and
      rm.rn = 1
    inner join
  TRProp p
    on
      rm.PropCode = p.PropCode
group by
  m.District,p.tc233

SQLFiddle