This document provides techniques for compiling annual reports and statistics using Crystal Reports. It includes examples of SQL views and stored procedures for creating reports on annual reports, statistics at a glance, eclipse reports tracking virtual and actual records, and exhibition status reports pulling data from a Thesaurus Management System (TMS). Formulas, grouping, sorting, and formatting are demonstrated.
20. STATISTICS AT A GLANCE: SQL VIEW
CREATE VIEW [plugin_SAG] AS
SELECT '_____' AS grouper, '______' AS label, COUNT(*) AS value, '_' AS rank
FROM ___________ WHERE _____________________________
UNION
SELECT '2. Basic Media' AS grouper, 'Media Count - Approved' AS label, COUNT(*) AS value,
'2' AS rank FROM MediaMaster WHERE ApprovedForWeb = 1
UNION
SELECT '1. Basic Object' AS grouper, 'Object Count - Total' AS label, COUNT(*) AS value,
'1' AS rank FROM Objects
UNION
SELECT '1. Basic Object' AS grouper, 'Object Count - Virtual Records (excluding Group)' AS
label, COUNT(*) AS value, '3' AS rank FROM Objects
WHERE isVirtual = 1 AND ObjectNumber NOT LIKE 'Grp%'
UNION
SELECT '3. Object By Level' AS grouper, 'Management Level - Total' AS label, COUNT(*) AS
value, '2' AS rank FROM Objects
WHERE ObjectLevelID = 1
29. ECLIPSE REPORT: CREATE TABLE
CREATE TABLE mim_Eclipse (
[ID] int IDENTITY(1,1) NOT NULL,
[virtual] int NOT NULL,
[actual] int NOT NULL,
[free] int NOT NULL,
[TimeStamp] timestamp NULL
)
31. ECLIPSE REPORT: STORED PROCEDURE
CREATE PROCEDURE [do_eclipse] AS
DECLARE @virtual int, @actual int, @free int
/* Find and Record Virtual Records */
SELECT ObjectID FROM Objects
WHERE ObjectNumber LIKE 'V%‘ AND ObjectID IN (SELECT ObjectID FROM mim_activeExhObj)
SET @virtual = @@ROWCOUNT
/* Find and Record Actual Records */
SELECT ObjectID FROM Objects
WHERE ObjectNumber NOT LIKE 'V%'
SET @actual = @@ROWCOUNT
/* Find and Record Unallocated Records */
SELECT ObjectID FROM mim_voReconciliation
SET @free = @@ROWCOUNT
/* Do SQL INSERT */
INSERT INTO mim_Eclipse ( virtual, actual, free ) VALUES ( @virtual, @actual, @free )
48. EXHIBITION STATUS REPORT: SQL VIEW
SELECT TX.ID AS ExhibitionID, T.Term, 1 AS type
FROM ThesXrefs TX
INNER JOIN TMSThes.dbo.Terms T ON TX.TermID = T.TermID
WHERE TX.TableID = 47 AND TX.ThesXrefTypeID = 29 AND Active = 1
UNION ALL
SELECT TX.ID AS ExhibitionID, T.Term, 2 AS type
FROM ThesXrefs TX
INNER JOIN TMSThes.dbo.Terms T ON TX.TermID = T.TermID
WHERE TX.TableID = 47 AND TX.ThesXrefTypeID = 30 AND Active = 1
UNION ALL
49. EXHIBITION STATUS REPORT: SQL VIEW
SELECT ExhibitionID, CONVERT(Varchar,Count(*)) As Term, 3 AS type
FROM mim_activeExhObj
GROUP BY ExhibitionID
UNION ALL
SELECT E.ExhibitionID, CONVERT(Varchar,Count(*)) As Term, 4 AS type
FROM mim_activeExhObj E
INNER JOIN Objects O ON E.ObjectID = O.ObjectID
WHERE O.ObjectNumber LIKE 'V%‘
GROUP BY E.ExhibitionID
UNION ALL
SELECT E.ExhibitionID, CONVERT(Varchar,Count(*)) As Term, 5 AS type
FROM mim_activeExhObj E
INNER JOIN Objects O ON E.ObjectID = O.ObjectID
WHERE O.ObjectNumber NOT LIKE 'V%'
GROUP BY E.ExhibitionID
50. EXHIBITION STATUS REPORT: SQL VIEW
CREATE VIEW [ mim_activeExhData ] AS
SELECT ExhibitionID,
MAX(CASE WHEN type = 2 AND Term = 'yes' THEN 'TRUE' ELSE 'FALSE' END) AS DataSubmission,
MAX(CASE WHEN type = 1 THEN Term ELSE NULL END) AS ExhStatus,
MAX(CASE WHEN type = 3 THEN Term ELSE 0 END) AS QtyTotal,
MAX(CASE WHEN type = 4 THEN Term ELSE 0 END) AS QtyVirtual,
MAX(CASE WHEN type = 5 THEN Term ELSE 0 END) AS QtyAcq
FROM (
/* Insert UNION ALL statements here */
) AS Data
GROUP BY ExhibitionID