2017-02-14 4 views
1

Я пытаюсь добавить общую строку внизу этого синтаксиса sql, но до сих пор не получил прорыв. Я рассмотрел следующее, но оба они не придерживаются моего условия. Может кто-то, пожалуйста, помогите в этом.Показать общее количество для таблицы SQL

Add a summary row with totals

Adding a total row to the end of query result

select dm.Builder ||' ('|| dm.Lot_Size || '''s)' as"Builder",count(sd.Address) "The Count", 
dm."Construction_ID" 
from input dm 
left join data sd on sd.inputfk = dm.inputpk 
and sd.Closing Date >= DATE '01/01/2017' and sd.Closing Date < DATE '06/30/2017' 
where dm.Construction_ID = 'AJR' 
group by dm.Builder,dm.Lot_Size, dm.Project_ID 
having count(sd.Address) > 0 
order by dm.Builder 

Когда я запускаю его:

Builder   The Count  Construction_ID 
Jake's Homes (55's)  2    AJR 
Jake's Homes (65's)  3    AJR 
Maggie's Homes (65's) 5    AJR 
Maggie's Homes (66's) 2    AJR 
Maggie's Homes (75's) 3    AJR 
Maggie's Homes (90's) 1    AJR 

Total ---------->  16 
+1

'Я не обращаю внимания на то, почему результат лишний раз показывает, что для тех же комбинаций Builders и Lot Size, даже если я сгруппировал ВСЕ столбцы в скрипте.' - может быть из-за 'sd.Address'? – RIKI

+0

Да, это необходимо для удаления 'sd.Address'. –

ответ

2

Ваш group by имеет dm.Project_ID, sd.Address, который, вероятно, вызывает его.

Для общей сложности, вы можете использовать ROLLUP:

Попробуйте это:

select coalesce(dm.Builder || ' (' || dm.Lot_Size || '''s)', 'Total') as "Builder", 
    count(sd.Address) "The Count", 
    dm."Construction_ID" 
from input dm 
left join data sd on sd.inputfk = dm.inputpk 
    and sd.Closing date >= date '01/01/2017' 
    and sd.Closing date < date '06/30/2017' 
where dm.Construction_ID = 'AJR' 
group by rollup(dm.Builder || ' (' || dm.Lot_Size || '''s)') 
having count(sd.Address) > 0 
order by "Builder" 
+1

@Pythoner - Вы можете просто заказать '' Builder''. Обновлено в моем ответе. – GurV

1

Попробуйте это:

select dm.Builder ||' ('|| dm.Lot_Size || '''s)' as"Builder",count(sd.Address) "The Count", 
dm."Construction_ID" 
from input dm 
left join data sd on sd.inputfk = dm.inputpk 
and sd.Closing Date >= DATE '01/01/2017' and sd.Closing Date < DATE '06/30/2017' 
where dm.Construction_ID = 'AJR' 
group by rollup((dm.Builder,dm.Lot_Size, dm.Project_ID)) 
having count(sd.Address) > 0 
order by dm.Builder 

Просто ... почему вам нужно count(sd.Address) > 0?