我找不到任何可以帮助我接近目标的问题/答案。我在 SQL Fiddle 上有下表检查代码。
SITENAME RTYPE SEASON CTRSTAT CTRTYPE UNITS STARTDATE WKTYPE INVSTAT
site1 T2B P null null 92 null FRSA_P Unsold
site1 T2B Pre null null 36 null FRSA_P Unsold
site1 T2B PRI null null 173 null FRSA_P Unsold
site1 T2B SPE null null 56 null FRSA_P Unsold
site1 T2B P Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B Pre Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B PRI Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B P Complete FRSA 1 2013-03-05 FRSA_P Sold
site1 T2B P Complete FRSA 3 2014-01-01 FRSA_P Sold
site1 T2B Pre Complete FRSA 4 2014-01-01 FRSA_P Sold
site1 T3B P null null 69 null FRSA_P Unsold
site1 T3B Pre null null 26 null FRSA_P Unsold
site1 T3B PRI null null 125 null FRSA_P Unsold
site1 T3B SPE null null 40 null FRSA_P Unsold
site1 T3B Pre Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T3B P Complete FRSA 1 2014-01-01 FRSA_P Sold
site1 T3B Pre Complete FRSA 2 2014-01-01 FRSA_P Sold
然后以某种方式得到如下图所示的报告。如果 InvStatus 未售出,则报告应返回Unsold,否则返回 CTRSTAT。
请不要关注总数和总计,图像来自使用其他数据的excel。只是为了获得所需结果的样本。
编辑:日期列对应于一整年,因此例如2013-03-05
属于该列的日期01/01/2013
列。如果日期为空,则它们将转到显示的最后一年,在这种情况下01/01/2014
,但可能是 2015 年或最后显示的任何时期。
我尝试了几种不同的方法,与各种类型GROUP BY
一起使用,但都没有奏效。并且没有用,或者至少我没有设法得到正确的结果。也许只是不可能,至少不是一个简单的方法。GROUPING
SETS
CUBE
ROLLUP
这是我尝试过的众多查询之一的示例,试图扭曲它以获得类似报告的内容,但仍然没有接近。
SELECT
sitename, rtype, season, ctrstat, ctrtype, SUM(units)
,startdate, invstat
FROM tt
GROUP BY
GROUPING SETS ((sitename,InvStat,ctrstat)
,(RType,ctrtype,season,startdate)
,()
)
编辑:也许应该更好地使用 SSRS 来完成这项任务?