2010-03-20 5 views
3

I ont une ClassAttendance de table et j'utilise MSSQL 2005lignes sql à colonnes conversion

studentID attendanceDate status 
------------------------------------- 
*1004   2010-03-17  0 
1005   2010-03-17  1 
1006   2010-03-17  0 
1007   2010-03-17  0 
*1004   2010-03-19  0 
1005   2010-03-19  1 
1006   2010-03-19  0 
1007   2010-03-19  0 
*1004   2010-03-20  1 

comme vous pouvez le voir idEtudiant est une clé étrangère d'une table appelée StudentData et attendedDate a un nombre inconnu de lignes.

Puis-je obtenir la sortie comme ci-dessous en utilisant une requête? J'ai besoin que les dates dans un mois soient des colonnes et la valeur des colonnes de date sera des valeurs dans la colonne d'état. Le nombre d'enregistrements de date par studentID est le même que le nombre de dates de la date de présence qui est inconnu.

studentID 2010-03-17 2010-03-19 2010-03-20 
------------------------------------------------  
1004   0   0   1 

etc. Ceci est pour la création d'un rapport, alors je dois le faire dans une requête. S'il vous plait aidez si vous le pouvez.

Répondre

2

Vous pouvez utiliser PIVOT. Jetez un oeil à this article.

+0

Oui qui fonctionnerait, mais la chose est que vous devez connaître les valeurs de champ avant la main à utiliser ce n'est pas toi ?? Le problème ici est qu'il n'y a pas de dire combien de dates par mois seront insérées dans la table et aucune idée sur les dates ... Et comment puis-je obtenir la date en tant que nom de la colonne? L'exemple ne montre pas cela. – Thihara

1

Peut-être quelque chose en utilisant le SQL 2005 PIVOT clause? (Voir aussi: msdn)

+0

Oui cela fonctionnerait mais la chose est que vous devez connaître les valeurs de champ avant la main pour employer cela ne vous? Le problème ici est qu'il n'y a pas de dire combien de dates par mois seront insérées dans la table et aucune idée sur les dates ... – Thihara

1

Utilisez un Matrix control dans le rapport (ou CrossTab dans un rapport d'accès, ou l'équivalent dans votre outil client)

SQL est une définition de colonne fixe/langue du contrat et vous ne savez pas comment pouvez-vous colonnes. Ce n'est pas vraiment un problème SQL mais un problème de présentation.

Sauf si vous utilisez PIVOT SQL dynamique ... pas SQL Server 2005+ commande PIVOT qui est à nouveau fixé, les colonnes connues

+0

Merci mec mais je le veux pour un rapport et je préférerais si je peux juste obtenir les résultats en utilisant une requête! – Thihara

+0

Un rapport implique une présentation. Vous pouvez créer un tableau croisé dans Excel si vous le souhaitez. Mais SQL n'est pas l'endroit pour le faire. – gbn