mercoledì 13 settembre 2017

How to: Count all numeric row with "n" decimals

Sembra facile ma non è difficile...
come si possono contare tutte le righe di una tabella per cui un campo numerico ha un Dato numero di decimali.

Consideriamo di avere una tabella simile a questa:

ID ContoDiCasa Causale Importo_con_decimali Percentuali
1 Elettrodomestici Televisione 2300,000 48,191
2 Assicurazioni Macchina_A 1800,000 37,714
3 Spesa supermercato 123,950 2,60
4 Benzina Macchina_A 70,000 1,467
5 Elettrodomestici Frullatore 120,000 2,55
6 Elettrodomestici Bilancia 30,000 0,629
7 Benzina Macchina_B 20,000 0,42
8 Assicurazioni Casa 186,000 3,897
9 Giochi Console 75,050 1,572
10 Giochi Under18 47,720 1,00


Rappresenta in breve un ipotetico conto di casa, supponiamo di voler cercare tutte le occorrenze che hanno solo 2 posizioni decimali.


Select
      Percentuali,
      right(CONVERT(varchar,Percentuali),3) soloDec,
      CHARINDEX('.', right(CONVERT(varchar,Percentuali),3)) PosizionePunto,     
from
      mia_Tabella
where
      Percentuali >0
and
      CHARINDEX('.', right(CONVERT(varchar,Percentuali),3)) =2

Con questa prima query recuperiamo solo i dati di nostro interesse.

Select count (*) from
(
 Select
  Percentuali,
  right(CONVERT(varchar,Percentuali),3) soloDec,
  CHARINDEX('.', right(CONVERT(varchar,Percentuali),3)) PosizionePunto,     
 from
  mia_Tabella
 where
  Percentuali >0
 and
  CHARINDEX('.', right(CONVERT(varchar,Percentuali),3)) =2
)

Con questa seconda otteniamo il conteggio.