Je souhaite extraire des données de trois tables dans une base de données SQL Server 2005. Bien que cela puisse sûrement être fait dans le code, il semble que cela pourrait être fait raisonnablement bien en SQL (points bonus pour LINQ!).Nombre d'entrées sur trois tables basées sur un mois dans SQL ou LINQ
Fondamentalement, je voudrais savoir pour chaque mois combien d'appels et de réunions chaque employé a eu avec chacun de nos clients. Quelque chose comme ceci:
Employee GUID Customer GUID Jan calls Jan mtgs Feb calls Feb mtgs...
[a guid] [another guid] 5 0 7 3
Les données sont réparties entre trois tables. Par souci de simplicité, nous allons montrer que les colonnes correspondantes:
Communications Tableau
[CommunicationId] (PK, uniqueidentifier)
[Type] (nvarchar(1)) ('C' for call, 'M' for meeting, etc.)
[Date] (datetime)
Tableau Personne-Communication
[PersonId] (PK, FK, uniqueidentifier) (Can contain GUIDs for employees or clients, see Person Table below)
[CommunicationId] (PK, FK, uniqueidentifier)
Personne Tableau
[PersonId] (PK, uniqueidentifier)
[Type] (nvarchar(1)) ('E' for employee, 'C' for customer)
Ainsi, questions:
- cela peut-il être fait dans SQL sans le code ou horrible de gros problèmes de performance?
- Si oui, comment? Je me contenterais même d'une bonne stratégie de haut niveau. Je suppose que pivots jouera un grand rôle ici (en particulier l '"Exemple PIVOT complexe"). DATEPART(MONTH, Date) semble être une bonne méthode pour diviser les communications par mois le long des lignes de:
SELECT DATEPART(MONTH, Date), COUNT(*) FROM [CommunicationTable] WHERE DATEPART(YEAR, Date) = '2009' GROUP BY DATEPART(MONTH, Date) ORDER BY DATEPART(MONTH, Date)
... ce qui me fait le nombre de communications chaque mois en 2009:
1 2871
2 2639
3 3654
4 2751
5 1773
6 2575
7 2906
8 2398
9 2621
10 2638
11 1705
12 2290
@Hogan: le type de données 'uniqueidentifier' n'implique pas la contrainte' UNIQUE'. – Quassnoi
@Hogan: 'uniqueidentifier' est le terme SQL Server pour un GUID. Plusieurs personnes peuvent être associées à plusieurs communications (mais une seule fois, par exemple, être associé à un appel téléphonique trois fois est absurde et interdit). –
Yikes! Je le reprends ... peu importe. – Hogan