Create Bar Charts | Database Journal

Create Bar Charts

Written By
Alan Enderby
Alan Enderby
Oct 9, 2000
2 minute read

Create bar charts, even includes X and Y labels!

create proc Hbar
@cmd varchar(255) , /* TSQL
SELECT statement 1st column
Character, 2nd column numeric */
@barsize
int=100 , /* Maximum size of bar */
@data_label bit=1, /* Label each bar with
value 1=yes */
@x_label varchar(25)=null,
@y_label
varchar(25)=null,
@title varchar(255)=null, /* Title for chart */
@barchar
char(1)=’*’ /* Character to use for bar */
as

SET NOCOUNT ON


Get x & y into table #t1

CREATE TABLE #t1 (x varchar(25),y
real)
INSERT INTO #t1 exec (@cmd)

— Format bars

DECLARE
@barsize2 varchar(3) Select

@barsize2=convert(varchar(8),@barsize)
DECLARE @max real,@i
varchar(12)
SELECT @max=max(y) from #t1
SELECT @i =
str(@barsize/@max,6,6)

CREATE TABLE #t2 (x varchar(25),bar varchar(255),y
real)
INSERT INTO #t2 EXEC ("SELECT right(replicate(‘
‘,25)+x,25),
Bar=convert(char("+ @barsize2
+"),
isnull(replicate(‘"+@barchar+"’,convert(int,y*" + @i
+")),”)),y
from #t1")

— Label bars if required

IF
@data_label =1
UPDATE #t2 SET bar=bar+’ (‘+convert(varchar(14),y)+
‘)’

— Print title

DECLARE @line varchar(255) ,@c int
SELECT
@c=((@barsize+50)-datalength(@title))/2
SELECT @line = REPLICATE(‘ ‘,@c) +
@TITLE
PRINT @line
SELECT @line = REPLICATE(‘ ‘,@c) + replicate

(‘=’,datalength(@title))
PRINT @line
PRINT ‘ ‘
SELECT
@line=right(REPLICATE(‘ ‘,25)+@x_label,25)
PRINT @line
PRINT ‘ ‘


print chart

DECLARE hb_cursor INSENSITIVE CURSOR
FOR SELECT
x,bar,y
FROM #t2

DECLARE @x varchar(25), @bar varchar(255) ,@y
real

OPEN hb_cursor
WHILE 1=1
BEGIN
FETCH NEXT FROM hb_cursor
INTO @x ,@bar ,@y
IF @@FETCH_STATUS <> 0
BREAK
EXEC (‘ PRINT
"’ + @x + ‘ | ‘ + @bar +’"’)
END
DEALLOCATE hb_cursor


Print y axis

DECLARE @Scale varchar(255) , @y_axis
varchar(255)
SELECT @scale = ‘ +’
SELECT @y_axis
= ‘ 0’

DECLARE @ten int SELECT
@ten=@max/(@barsize/10)

DECLARE @ten2 int SELECT @ten2 =
@ten

WHILE @ten2 < @max+@ten
BEGIN
SELECT @scale = @scale +
‘—-+—-+’
SELECT @y_axis = @y_axis + right (‘

‘+convert(varchar(5),@ten2),10)
SELECT @ten2=@ten2 + @ten
END
PRINT
@scale
PRINT @y_axis
PRINT ‘ ‘
SELECT @line = REPLICATE(‘ ‘,@c) +
@y_label
PRINT @line
PRINT ‘ ‘
go

/* TEST DATA */

exec
Hbar ‘select convert(varchar(5),spid),cpu from
master..sysprocesses where
cpu<>0′,
@barsize=100,
@data_label=0,
@title=’Processes by
CPU’,
@barchar=’#’,
@x_label=’SPID’,
@y_label=’CPU’

set nocount
on
declare @cmd varchar(255)
select @cmd="
select o.name,
size=sum(used * 2)
from sysindexes i, sysobjects o ,syscolumns c
where
i.id = o.id
and i.indid in (0, 1, 255)
and c.id = o.id
and o.name not
like ‘sys%’

GROUP BY o.name,o.id "

exec Hbar
@cmd,@barsize=100,@data_label=1,@title=’Tables by Size’

Database Journal Logo

DatabaseJournal.com publishes relevant, up-to-date and pragmatic articles on the use of database hardware and management tools and serves as a forum for professional knowledge about proprietary, open source and cloud-based databases--foundational technology for all IT systems. We publish insightful articles about new products, best practices and trends; readers help each other out on various database questions and problems. Database management systems (DBMS) and database security processes are also key areas of focus at DatabaseJournal.com.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.