Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: Hulp bij een query om totalen te berekenen
Prev Next
You are not authorized to post a reply.

Author Messages
Stephan BussingUser is Offline

Posts:67

05-12-2008 14:23:59 Alert 
Hoi ik ben bezig om een query te schrijven die een aantal totalen teruggeeft.

Toelichting:
Ik heb een aantal tabellen die hierarchisch met elkaar zijn verbonden. uiteindelijk tot 4 niveaus diep. elke parent heeft 1..N children. Nu wil ik op basis van de hoofdentiteit berekenen hoeveel children er zijn van de verschillende typen. Als eerste heb ik een view gemaakt die van een hoofentiteit alle records bij elkaar zoekt. Dit is dan ook mijn uitgangspunt. Met een select beperkt ik het aantal velden wat ik terug wil hebben. Vervolgens doe ik voor elk veld een aparte query die ik group. In totaal dus 5 querys. De resultaten gaan in aparte tempTables en aan het einde stop ik de resultaten van de tempTables in een TotaleTable (ook een temptable). Ik denk dat het een beetje omslachtig is, vandaar dat ik mij tot jullie richt.

Het werkt allemaal wel, maar volgens mij kan het wel iets handiger.

zie de code:
[code]
DROP TABLE #Totals
CREATE TABLE #Totals
(
Patterns INT,
Problems INT,
MainGoals INT,
WorkGoals INT,
Disciplines INT
)

SELECT COUNT(*) Patterns
INTO #tempPatterns
  FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117
GROUP BY [PatternId]

--if object_id(N'[tempdb].[dbo].[#tempPatterns]') is not null

SELECT COUNT(*) Problems
INTO #tempProblems
  FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117
GROUP BY [PatternProblemId]

--if object_id(N'[tempdb].[dbo].[#tempProblems]') is not null

SELECT COUNT(*) MainGoals
INTO #tempMainGoals
  FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117
GROUP BY [ProblemMainGoalId]

--if object_id(N'[tempdb].[dbo].[#tempMainGoals]') is not null

SELECT COUNT(*) WorkGoals
INTO #tempWorkGoals
  FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117
GROUP BY [MainGoalWorkGoalId]

--if object_id(N'[tempdb].[dbo].[#tempWorkGoals]') is not null

SELECT COUNT(*) Disciplines
INTO #tempDisciplines
  FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117
GROUP BY [WorkGoalDisciplineId]


DECLARE @Patterns INT
DECLARE @Problems INT
DECLARE @MainGoals INT
DECLARE @WorkGoals INT
DECLARE @Disciplines INT

SELECT @Patterns=COUNT(*) FROM #tempPatterns
SELECT @Problems=COUNT(*)  FROM #tempProblems
SELECT @MainGoals=COUNT(*) FROM #tempMainGoals
SELECT @WorkGoals=COUNT(*) FROM #tempWorkGoals
SELECT @Disciplines=COUNT(*) FROM #tempDisciplines

DROP TABLE #tempProblems
DROP TABLE #tempWorkGoals
DROP TABLE #tempPatterns
DROP TABLE #tempMainGoals
DROP TABLE #tempDisciplines

INSERT INTO #Totals VALUES (@Patterns,@Problems,@MainGoals,@WorkGoals,@Disciplines)
SELECT * FROM #Totals
[/code]
David ScheltensUser is Offline

Posts:33

05-12-2008 14:32:16 Alert 
Als je sql 2005 of hoger gebruikt, dan zou je dit moeten kunnen oplossen met een CTE (common table expression)
Stephan BussingUser is Offline

Posts:67

05-12-2008 16:22:48 Alert 
Hallo David,

Goeie tip, maar ik kan (nog) geen 2005 gebruiken.  Ik moet het nog doen met good old 2000.

Bedankt voor je reactie.

Gr.


Vladimir EricUser is Offline

Posts:6

12-12-2008 16:49:09 Alert 
Hi Stephan,

Ik zou "count(distinct " proberen:

SELECT COUNT(distinct PatternId) Patterns,
COUNT(distinct PatternProblemId) Problems,
COUNT(distinct ProblemMainGoalId) MainGoals,
COUNT(distinct MainGoalWorkGoalId) WorkGoals,
COUNT(distinct WorkGoalDisciplineId) Disciplines
FROM [dbo].[vw_HCP]
WHERE [HealthCarePlanId]=117

gr.
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > Hulp bij een query om totalen te berekenen



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use