我将创建一个SQL查询,该查询将根据其开始时间直到当前时间显示租户的销售额,除非它已经不活动。在下面给出的表格中,租户1和2显示了他们每年的销售额。租户1在2011年开始时有5行,2014年有租户2。
<select class="selectpicker" name="choixVarX" id="choixVarX" size="1" onChange="populateMap('#DDDDC2','#000000',listeComparaison);">
<option value="Pop">Population</option>
<option value="FoyersImposes">Nombre de foyers imposés</option>
<option value="FoyersFiscaux">Nombre de foyers fiscaux</option>
<option value="PropRetraite">Part des retraites dans les revenus</option>
<option value="PropFoyersImposes">Proportion de foyers imposés</option>
<option value="RevMoyen">Revenu moyen</option>
</optgroup>
</select>
<select class="selectpicker" multiple name="parametresX[]" id="parametresX" size="1" data-width="150px" onChange="populateMap('#DDDDC2','#000000',listeComparaison);" data-max-options="3">
<optgroup label="Centrage des données" data-max-options="1" id="centrageX">
<option value="median">Médiane des communes</option>
<option value="moyenne">Moyenne des communes</option>
<option value="pasCentre">Ne pas centrer</option>
</optgroup>
<optgroup label="Dispersion" id="dispersionX" data-max-options="1">
<option value="minmax">Min-Max</option>
<option value="ecarttype">Ecart-type</option>
<option value="noDispersion">Aucun</option>
</optgroup>
<optgroup label="Echelle" id="echelleX" data-max-options="1">
<option value="echelleComplete">Echelle étendue</option>
<option value="echelleAdaptee">Echelle réduite</option>
</optgroup>
</select>
$('#choixVarX').on('change',function(){
if($('#choixVarX').val()=="FoyersImposes" || $('#choixVarX').val()=="FoyersFiscaux" || $('#choixVarX').val()=="Pop"){
$('.selectpicker').selectpicker('refresh');
$('#centrageX option[value="median"]').attr('selected',false);
$('#centrageX option[value="moyenne"]').attr('selected',false);
$('#centrageX option[value="pasCentre"]').attr('selected',true);
$('#dispersionX option[value="minmax"]').attr('selected',false);
$('#dispersionX option[value="ecarttype"]').attr('selected',false);
$('#dispersionX option[value="noDispersion"]').attr('selected',true);
$('#centrageX').attr('disabled',true);
$('#dispersionX').attr('disabled',true);
$('.selectpicker').selectpicker('refresh');
}else{
$('#centrageX').attr('disabled',false);
$('#dispersionX').attr('disabled',false);
$('.selectpicker').selectpicker('refresh');
}
});
到目前为止,我完全失去了该做什么,我有一个现有的代码,不知怎的做同样但它是静态的,并且在它显示的年份不灵活,默认是5年,它是在垂直形式。
+----------+------+-------------+
| TENANT | YEAR | TOTAL SALES |
+----------+------+-------------+
| Tenant 1 | 2011 | 1,000 |
| Tenant 1 | 2012 | 3,000 |
| Tenant 1 | 2013 | 2,000 |
| Tenant 1 | 2014 | 3,000 |
| Tenant 1 | 2015 | 2,000 |
| Tenant 2 | 2014 | 5,000 |
| Tenant 2 | 2015 | 2,000 |
+----------+------+-------------+
租户销售表
答案 0 :(得分:2)
您可以尝试在GROUP BY
和年份上执行TENANT
以获得所需的输出:
SELECT TENANT, YEAR(DATE), SUM(Sales) AS `TOTAL SALES`
FROM TenantSales
GROUP BY TENANT, YEAR(DATE)
答案 1 :(得分:0)
一种方法是使用dynamic crosstab:
DECLARE @sql NVARCHAR(MAX) = N''
SELECT @sql =
'SELECT
Tenant' + CHAR(10)
SELECT @sql = @sql +
' , SUM(CASE WHEN [Year] = ' + CONVERT(VARCHAR(4), yr) + ' THEN Sales ELSE 0 END) AS ' + QUOTENAME('Year' + CONVERT(VARCHAR(4), N)) + CHAR(10)
FROM(
SELECT *,
ROW_NUMBER() OVER(ORDER BY yr) N
FROM(
SELECT DISTINCT [Year] AS yr
FROM TenantSales
) a
) t
ORDER BY N
SELECT @sql = @sql +
'FROM TenantSales
GROUP BY Tenant
ORDER BY Tenant'
PRINT @sql
EXECUTE sp_executesql @sql
结果:
| Tenant | Year1 | Year2 | Year3 | Year4 | Year5 |
|----------|-------|-------|-------|-------|-------|
| Tenant 1 | 1000 | 3000 | 2000 | 3000 | 2000 |
| Tenant 2 | 0 | 0 | 0 | 5000 | 2000 |
答案 2 :(得分:0)
您可以传递一个为pivot语句准备好的参数,而不是传递5个单独的参数。当您从某个客户端应用程序传递所需的年份时,这是该版本。它不是完全动态的:
CREATE TABLE ##t(TENANT VARCHAR(100), YEAR INT, SALES MONEY)
INSERT INTO ##t VALUES
('Tenant 1', 2011, 1000),
('Tenant 1', 2012, 3000),
('Tenant 1', 2013, 2000),
('Tenant 1', 2014, 3000),
('Tenant 1', 2015, 2000),
('Tenant 2', 2014, 5000),
('Tenant 2', 2015, 2000)
DECLARE @p VARCHAR(100) = '[2011],[2012],[2013],[2014],[2015]'
DECLARE @s VARCHAR(MAX) = 'select * from ##t
pivot(sum(sales) for year in(' + @p + '))p'
EXEC(@s)
DROP TABLE ##t