Using MSSQL 2019. Here is the query:
SELECT
substring([PIMNumber],1,2) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,2)
UNION
SELECT
substring([PIMNumber],1,5) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,5)
union
SELECT
substring([PIMNumber],1,8) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,8)
union
SELECT
substring([PIMNumber],1,11) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,11)
union
SELECT
substring([PIMNumber],1,14) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,14)
union
SELECT
substring([PIMNumber],1,17) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,17)
union
SELECT
substring([PIMNumber],1,20) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,20)
union
SELECT
substring([PIMNumber],1,23) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,23)
union
SELECT
substring([PIMNumber],1,26) as pim,
count(PIMNumber) as cnt
FROM [Contact].[Contact].[Consumer]
group by substring([PIMNumber],1,26)
order by pim
Sample Output:
First question: Is there a better way to write this query?
Second question: How to output as json so that pim 01 contains all 01.xxxxx, 01.01 contains 01.01.xxxxx, 02 contains 02.xxx, etc?
Sample json: [{"pim": "01", "cnt": 1045}, [{"pim":"01.01","cnt":245},[{"pim":"01.01.01","cnt":35}], [{"pim":"01.02","cnt":135}]]], [{"pim":"02","cnt":2345}]
(brackets may be misplaced)
Last question: Is there a way to write the query if the total length of PIMNumber is unknown? Each new level would be .##
Thanks.
Bryan