J'ai deux grandes tables que je voudrais utiliser comme base pour une troisième table encore plus grande!Comment créer une troisième table à partir de deux tables?
la sortie dépend de l'intervalle de date, comme 01/09/2010 - 03/09/2010
Exemple de sortie de TABLEAU A - - (ATTRIBUE testeurs)
Date Country Allocated testers
09/01/2010 Nigeria 0
09/02/2010 Nigeria 1
09/03/2010 Nigeria 134
09/01/2010 China 2
09/02/2010 China 0
09/03/2010 China 14
09/01/2010 Chile 3
09/02/2010 Chile 4
09/03/2010 Chile 0
*************
Exemple de sortie de TABLEAU B - - (ABSENT Testeurs)
Date Country Absent testers
09/01/2010 Nigeria 0
09/02/2010 Nigeria 7
09/03/2010 Nigeria 0
09/01/2010 China 2
09/02/2010 China 0
09/03/2010 China 0
09/01/2010 Chile 1
09/02/2010 Chile 0
09/03/2010 Chile 0
*************
Exemple de sortie de WANTED TABLEAU C (ALLOUE ET ABSENTS testeurs)
Date Country Allocated testers Absent testers
09/01/2010 Nigeria 0 0
09/02/2010 Nigeria 1 7
09/03/2010 Nigeria 134 0
09/01/2010 China 2 2
09/02/2010 China 0 0
09/03/2010 China 14 0
09/01/2010 Chile 3 2
09/02/2010 Chile 4 0
09/03/2010 Chile 0 0
Et est un code SQL ici générer la sortie ci-dessus ... (oui, ils travaillent)
TABLE A
WITH Calendar AS (SELECT CAST(@StartDate AS datetime) AS Date
UNION ALL
SELECT DATEADD(d, 1, Date) AS Expr1
FROM Calendar AS Calendar_1
WHERE (DATEADD(d, 1, Date) < @EndDate))
SELECT C.Date, C2.Country, COALESCE (SUM(R.[Amount of people per day needed]), 0) AS [Allocated testers]
FROM Calendar AS C CROSS JOIN
Country AS C2 LEFT OUTER JOIN
Requests AS R ON C.Date BETWEEN R.[Start date] AND R.[End date] AND R.CountryID = C2.CountryID
GROUP BY C.Date, C2.Country OPTION (MAXRECURSION 0)
TABLEAU B
WITH Calendar AS (SELECT CAST(@StartDate AS datetime) AS Date
UNION ALL
SELECT DATEADD(d, 1, Date) AS Expr1
FROM Calendar AS Calendar_1
WHERE (DATEADD(d, 1, Date) < @EndDate))
SELECT C.Date, C2.Country, COALESCE (COUNT(PA.PeopleID), 0) AS [Absent testers]
FROM Calendar AS C CROSS JOIN
Country AS C2 INNER JOIN
Roles AS R INNER JOIN
People AS P ON R.RolesID = P.RolesID ON C2.CountryID = P.CountryID LEFT OUTER JOIN
PeoplesAbsence AS PA ON C.Date BETWEEN PA.StartDate AND PA.EndDate AND P.PeopleID = PA.PeopleID
WHERE (R.Role = 'Tester')
GROUP BY C.Date, C2.Country OPTION (MAXRECURSION 0)
TABLEAU C est celui que je besoin d'aide pour créer :-)
NOTE: Je voudrais voir une sorte de code d'exemple, pour commencer!
AUSSI NOTE: Je veux ne pas résoudre ce avec des vues dans SQL Server, car juste doesnt travail ... - Je dois que 3: table rd ;-)
Résolu! A obtenu la solution de tdammers, ce qui est à quoi il ressemble quand mis en œuvre (merci!):
WITH Calendar AS (SELECT CAST(@StartDate AS datetime) AS Date
UNION ALL
SELECT
DATEADD(d, 1, Date) AS Expr1
FROM
Calendar AS Calendar_1
WHERE
(DATEADD(d, 1, Date) < @EndDate))
SELECT a.Date, a.Country, a.[Allocated testers], b.[Absent testers] FROM (SELECT
C.Date, C2.Country, COALESCE (SUM(R.[Amount of people per day needed]), 0) AS [Allocated testers]
FROM
Calendar AS C
CROSS JOIN
Country AS C2
LEFT OUTER JOIN
Requests AS R
ON
C.Date BETWEEN R.[Start date] AND R.[End date] AND R.CountryID = C2.CountryID
GROUP BY
C.Date, C2.Country) as a LEFT OUTER JOIN (SELECT C.Date, C2.Country, COALESCE (COUNT(PA.PeopleID), 0) AS [Absent testers]
FROM Calendar AS C CROSS JOIN
Country AS C2 INNER JOIN
Roles AS R INNER JOIN
People AS P ON R.RolesID = P.RolesID ON C2.CountryID = P.CountryID LEFT OUTER JOIN
PeoplesAbsence AS PA ON C.Date BETWEEN PA.StartDate AND PA.EndDate AND P.PeopleID = PA.PeopleID
WHERE (R.Role = 'Tester')
GROUP BY C.Date, C2.Country) as b ON a.date = b.date AND a.country = b.country
Non, je veux que ce soit une table! –
Oh attends, oublie ça. Les deux premiers ne sont pas non plus des tables, ce sont juste des requêtes sélectionnées. Je ne pense pas que vous savez réellement ce qu'est une table SQL en premier lieu. Quant à votre problème d'origine: - créer une vue de la première requête - créer une vue de la deuxième requête - utiliser un 'join' sur les deux vues pour accumuler la sortie désirée pour la requête C – tdammers
OK - Je reconnais que ce sont des requêtes select! Je plaisantais juste avant. Le problème est que je veux une troisième requête de sélection, pas de vues. Comme je ne peux pas créer de vues d'eux car ils contiennent des paramètres, je dois plutôt créer des fonctions définies par l'utilisateur, et pour moi cela me semble beaucoup plus important - alors donnez-moi un conseil sur la façon dont la troisième requête devrait être conçue. arrête de parler de Views! ;-) Et je sais vraiment ce qu'est une table SQL, le problème était que je ne savais pas ce que ce n'était pas - mais merci d'avoir trié ça. Je n'appellerai plus jamais une requête select une table, je le promets! –