Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 12h46   #1
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Par défaut [SQLSERVER2008] chercher le min d'une matrice

Bonjour,

Je voulais obtenir le min de ma table pour chaque groupe de données.

Par exemple ma table est comme suit :
code col1 col2 col3 col4
1 x1 x2 x3 x4
1 x4 ...................
1 x5 ...................
2 x3 ...................
2 ........................
2 .........................
Je veux retourner le min de la sous matrice en ligne et en colonne de chaque groupe.

Merci de m'aider
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h23   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Votre modèle de données ne respecte pas les principe de base de la modélisation. En effet, vous auriez du modéliser votre matrice ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE T_MATRICE_MTR
(MTR_ID         INT NOT NULL PRIMARY KEY,
 MTR_NB_COL     SMALLINT CHECK (MTR_NB_COL > 0),
 MTR_NB_LIG     SMALLINT CHECK (MTR_NB_LIG > 0));
GO 
 
CREATE TABLE T_MATRICE_VALUE_MTV
(MTV_ID         INT NOT NULL PRIMARY KEY T_MATRICE_MTR (MTR_ID),
 MTR_ID         INT NOT NULL FOREIGN KEY REFERENCES T_MATRICE_MTR (MTR_ID),
 MTV_COLONNE    SMALLINT NOT NULL CHECK (MTV_COLONNE > 0),
 MTV_LIGNE      SMALLINT NOT NULL CHECK (MTV_LIGNE > 0),
 MTV_VALUE      FLOAT);
GO
Dès lors vos requêtes deviennent simplissime et performantes :

Code :
1
2
3
4
-- obtenir le max de toutes les valeurs de chaque matrice :
SELECT MTR_ID, MAX(MTV_VALUE)
FROM   T_MATRICE_VALUE_MTV
GROUP  BY MTR_ID
Code :
1
2
3
4
-- obtenir le max de chaque ligne de chaque matrice :
SELECT MTR_ID, MTR_LIGNE, MAX(MTV_VALUE)
FROM   T_MATRICE_VALUE_MTV
GROUP  BY MTR_ID, MTR_LIGNE
Code :
1
2
3
4
-- obtenir le max de chaque colonne de chaque matrice :
SELECT MTR_ID, MTR_COLONE, MAX(MTV_VALUE)
FROM   T_MATRICE_VALUE_MTV
GROUP  BY MTR_ID, MTR_COLONNE
Et pour une matrice particuliète il suffit de rajouter un filtre WHERE, comme ceci :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 10h53   #3
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Bonjour,

Merci,

Le problème est que la table est crée dans la base de cette façon.
est ce je pourrai créer une autre avec le modèle de la matrice et y insérer les données !!!!
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 10h09   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
est ce je pourrai créer une autre avec le modèle de la matrice et y insérer les données !!!!
Mais faites donc créez vos tables et un script permettant de migrer vos données...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h54   #5
Membre à l'essai
 
Inscription : février 2011
Messages : 60
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : février 2011
Messages : 60
Points : 21
Points : 21
Bonjour,

Pour la création de la matrice, J'ai pas bien compris le rôle de la première table et la seconde T_MATRICE_VALUE_MTV.
Et après la création, comment je copie les données de la table source (select from insert into ...).

Merci de m'expliquer plus.

En fait j'ai une trentaine de colonne et pour MTV_VALUE, les champs n'ont pas tous le même type (int,float,date), je veux avoir le min juste de la sous matrice pour les champs de type date !!!

j'espère que j'étais clair .
AJ_ing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h26.


 
 
 
 
Partenaires

Hébergement Web