2012-01-05 2 views
6

Tenir compte exemple tableau ci-dessousComment trouver le numéro de ligne d'un enregistrement?

ProductDetailNo ProductDescription 
     224    Apples 
     225    Tomatoes 
     226    Potatoes 

Comment puis-je lister le numéro de ligne pour une ligne sélectionnée comme ci-dessous?

RowNo ProductDetailNo   Product Description 
    2   225    Tomatoes 

En utilisant row_number() dans ma requête renvoie seulement 1 toujours pour un seul enregistrement ne dure que la ligne est logique dans la base de données.

Merci, Damien.

+0

row_number() prend les résultats de votre requête et les numérote. Si votre requête n'a qu'une ligne retournée alors row_number() sera toujours 1. http://msdn.microsoft.com/en-us/library/ms186734.aspx –

+0

Merci pour l'info Brandon mais il doit y avoir un moyen –

+0

est loin. Ajoutez (ou utilisez) une clé unique à la table interrogée et utilisez la clé unique pour référencer le résultat. Si ProductDetailNo est unique, vous pouvez également l'utiliser comme référence arrière. –

Répondre

10

essayer cette

WITH MyTable AS 
(
    SELECT ProductDetailNo, ProductDescription, 
    ROW_NUMBER() OVER (ORDER BY ProductDetailNo) AS 'RowNumber' 
    FROM Product 
) 
SELECT RowNumber, ProductDetailNo  
FROM MyTable 
WHERE ProductDetailNo = 225 
+0

Hey ça ne fonctionne pas –

+1

essayez ceci. cela retournera seulement une rangée et il contiendra la dernière colonne Rownumber qui montrera son numéro de rangée dans les données –

+0

si vous avez n'importe quelle erreur spécifiez s'il vous plaît –

0

Le numéro de la ligne que vous recevez est de nombre de lignes de résultat. c'est-à-dire si votre résultat n'a qu'un seul tuple, la ligne no. sera toujours 1.

Pour obtenir le numéro de ligne de la table entière, vous devez ajouter un attribut supplémentaire, un RowNo avec incrément automatique à votre table.

Espérons que cela aide, mais peut-être SQL a encore meilleure solution pour vous!

+0

Merci Vinyak ne sais pas ce que le downvote était pour mais oui je suis toujours plein d'espoir un peu de magie SQL =) –

2

Qu'en est-il de celui-ci?

SELECT RowNo, ProductDetailNo, ProductDescription 
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription 
     FROM TheTable) as t 
WHERE ProductDetailNo = 225; 
+0

C'est excellent, mais la requête interne se déroulera pour toutes les lignes dans la table. Avez-vous une autre solution? –

+1

Eh bien, pour numéroter les choses, vous devez tous les connaître. C'est la meilleure solution pour votre question telle qu'elle est maintenant. –

+1

Bien sûr, la valeur renvoyée par 'ROW_NUMBER()' pourrait être différente entre chaque exécution de cette requête, sans ORDER BY (est-ce même valide?) –

2

Il n'y a pas de numéro de ligne inhérent pour une ligne de table. ROW_NUMBER() vous donne le numéro de la rangée seulement dans un ensemble de résultats spécifique. C'est donc le résultat attendu que vous obtenez toujours 1 lorsque le jeu de résultats contient seulement 1 enregistrement. Si vous voulez un numéro de ligne, votre schéma de table doit inclure quelque chose comme une colonne IDENTITY à incrémentation automatique.

+1

Hey Bobby, il y a un moyen avec SQL. –

3

Ce S'il vous plaît Vérifiez

WITH ArticleSearch AS 
    (
     SELECT 
      ROW_NUMBER() OVER 
       (
        ORDER BY tblProducts.ProductDetailNo          
       ) AS RowNumber, 
      tblProducts.ProductDetailNo, 
      tblProducts.ProductDescription  
     FROM   
      tblProducts 
    ) 

    SELECT 
     a.RowNumber AS SlNo, 
     a.ProductDetailNo, 
     a.ProductDescription 
    FROM 
      ArticleSearch a 
    WHERE 
      a.ProductDetailNo=225 
+0

Hey le sélection interne serait exécuté pour tous les enregistrements? –

2
WITH productCTE 
    AS 
    (SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription 
    FROM tbl_Products 
) 
    SELECT * FROM productCTE 
    WHERE RowNo = 2 
Questions connexes