IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Limit en ms sql


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Par défaut Limit en ms sql
    Bonjour,

    Je suis en train de bosser sur un affichage de tableau avec une requête. J'ai besoin de faire une limite, je sais faire en mysql mais pas en mssql. J'ai bien vu la "fonction" top, mais je n'arrive pas à l'utiliser pour mon cas. Le truc c'est que ma requête est énorme et je suis perdu !

    J'aimerais donc limiter 20 affichages depuis l'id numéro $news :

    En mysql : ...requete... limit $news,20
    Mais en mssql :s

    Voila ma pauvre requête :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    $retour = mssql_query("
    	SELECT
    		A.Call_ID 'Ticket',
    		A.Call_HistoFlag 'Status', 
    		B1.Lang_Text 'Queue', 
    		C1.Client_FirstName 'Client FirstName',
    		C1.Client_LastName 'Client LastName',
    		'Admin First Name' = CASE WHEN C2.Client_FirstName = 'Inter' THEN 'N/A' ELSE C2.Client_FirstName END,
    		'Admin Last Name' = CASE WHEN C2.Client_LastName = 'Mail' THEN 'N/A' ELSE C2.Client_LastName END,
    		'Admin Localisation' = CASE WHEN C2.Client_FirstName = 'Inter' THEN 'N/A' ELSE C2.Client_City END,
    		(CONVERT(CHAR(23),A.Call_DateEntered,120)) 'Created', 
    		'Closed' = CASE A.Call_HistoFlag WHEN 1 THEN (CONVERT(CHAR(23),A.Call_DateCompleted,120)) ELSE '' END,
    		'Duration' = CASE A.Call_HistoFlag 
    				WHEN 1 
    				THEN
    					CASE 
    						WHEN (A.Call_DateCompleted - A.Call_DateEntered) > 2 THEN convert(varchar, (datediff(dd, 0, A.Call_DateCompleted - A.Call_DateEntered))) +' Days '
    						WHEN (A.Call_DateCompleted - A.Call_DateEntered) > 1 THEN convert(varchar, (datediff(dd, 0, A.Call_DateCompleted - A.Call_DateEntered))) +' Day '
    						ELSE '' 
    					END
    					 + convert(varchar, A.Call_DateCompleted - A.Call_DateEntered, 108) 
    				ELSE '' 
    			END,
    		'Activity' = CASE WHEN B2.lang_Text = '(Aucun)' THEN 'N/A' ELSE B2.lang_Text END,
    		'Domain' = CASE WHEN A.Call_ivProdType_ID < 2 THEN 'N/A' ELSE E.ivProdType_Desc1 END,
    		'Application' = CASE WHEN A.Call_ivProduct_ID = 0 THEN 'N/A' ELSE F.ivProdData_Text END,
    		D.DD_Title 'Title'
    	FROM Calls A
    		LEFT OUTER JOIN Lang B1
    			ON A.Call_LST_QUEUE = B1.Lang_Id
    		LEFT OUTER JOIN Lang B2
    			ON A.Call_LST_CALLCAT = B2.Lang_Id
    		LEFT OUTER JOIN Client C1
    			ON A.Call_Client_ID = C1.Client_ID AND C1.Client_RessFlag = 0
    		LEFT OUTER JOIN ivProdType E
    			ON A.Call_ivProdType_ID = E.ivProdType_ID
    		LEFT OUTER JOIN ivProdData F
    			ON A.Call_ivProduct_ID = F.ivProdData_ProductID 
    		LEFT OUTER JOIN Client C2
    			ON A.Call_LastModifBy = C2.Client_ID AND C2.Client_RessFlag = 1
    		LEFT OUTER JOIN Task G
    			ON A.Call_ID = G.Task_Call_ID
    		LEFT OUTER JOIN DataDescription D
    			ON G.Task_Desc_DD_ID = D.DD_ID
    	WHERE
    		A.Call_LST_CALLSTAT <> 5515
    		AND A.Call_LST_QUEUE in (6228, 7969)
    		AND A.Call_DateEntered BETWEEN '$dateinf' AND '$datesup' 
    		AND A.Call_HistoFlag IN ('$hf1','$hf2')
    	ORDER BY A.Call_ID DESC
    ");
    Pitié une idée, pour me dire que j'ai pas perdu ma journée

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    LIMIT n'existe pas en T-SQL, et l'ordre n'existe pas en SQL .

    Si vous utilisez SQL Server 2005, vous devez ajouter la fonction ROW_NUMBER() dans la clause SELECT de votre requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT desColonnes
    FROM
    (
    	SELECT desColonnes,
    			ROW_NUMBER() OVER(ORDER BY uneColonneDontLesValeursSontUniques) AS Indice
    	FROM desTables
    ) TMP
    WHERE Indice BETWEEN @new and @new + 20
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH
    	CTE AS
    	(
    		SELECT desColonnes,
    				ROW_NUMBER() OVER(ORDER BY uneColonneDontLesValeursSontUniques) AS Indice
    		FROM desTables
    	)
    SELECT desColonnes
    FROM CTE
    WHERE Indice BETWEEN @new and @new + 20
    @++

  3. #3
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonsoir,

    C'est déja dans la FAQ du forum:

    http://sqlserver.developpez.com/faq/?page=Jeu#Jeu2

    @+

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bien vu

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Par défaut
    J'ai lu la FAQ, j'ai trouvé d'autres topic. Mais je n'y arrive pas d'ou ma demande, ça dérrange pas au moins ?

    Je vais voir avec se que tu Expliques Elsuket, merci.

  6. #6
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonjour,

    Non, ca ne dérange pas

    Mais pourriez vous envoyer la requête que vous avez faite en T-SQL ? Dans votre requête, il n'y a pas de tentative de filtrer les lignes sur leur rang.

    Le rang est-il déterminé par Calls.Call_ID ?

    @+

Discussions similaires

  1. [ODBC] Ajouter un LIMIT à une requête SQL
    Par thebarbarius dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/11/2010, 01h12
  2. Un LIMIT comme en SQL sous BIRT
    Par 0x44-0x43-0x53-0x43 dans le forum BIRT
    Réponses: 2
    Dernier message: 11/06/2010, 16h27
  3. Limiter résultat requete sql par critère
    Par filoulebauju dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/09/2009, 14h11
  4. [SQL] Limites de requettes SQL !
    Par Givemefive dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/05/2007, 13h39
  5. limitation accès simultanés SQL Serveur
    Par cbleas dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2006, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo