2012-02-05 13 views
6

के लिए पंक्ति संख्या प्राप्त करना मेरे पास एक प्रश्न है जो एक पंक्ति लौटाएगा। क्या कोई तरीका है कि मैं जिस पंक्ति को हल कर रहा हूं, उस पंक्ति की पंक्ति अनुक्रमणिका मैं पा रहा हूं?क्वेरी

मैंने rowid को आजमाया है, लेकिन जब मैं पंक्ति # 7 की अपेक्षा कर रहा था तो # 582 मिला।

उदाहरण के लिए:

CategoryID Name    
    I9GDS720K4 CatA 
    LPQTOR25XR CatB 
    EOQ215FT5_ CatC 
    K2OCS31WTM CatD 
    JV5FIYY4XC CatE 
--> C_L7761O2U CatF <-- I want this row (#5) 
    OU3XC6T19K CatG 
    L9YKCYAYMG CatH 
    XKWMQ7HREG CatI 

मैं अप्रत्याशित परिणामों के साथ rowid की कोशिश की है:

SELECT rowid FROM Categories WHERE CategoryID = 'C_L7761O2U ORDER BY Name 

संपादित करें: मैं भी जम्मू कूपर के सुझाव (नीचे) की कोशिश की है, लेकिन पंक्ति संख्या सिर्फ सही नहीं हैं

SELECT CategoryID, 
     Name, 
     (SELECT COUNT(*) 
     FROM mytable AS t2 
     WHERE t2.Name <= t1.Name) AS row_Num 
FROM mytable AS t1 
ORDER BY Name, CategoryID; 
+1

क्यों आप 'करने के लिए अपनी क्वेरी को संशोधित था ... कहां t2.RecipeID <= t1.RecipeID': मैं" val_order "कॉलम इस तरह से अद्यतन कर सकते हैं? आपके प्रश्न में आप 'नाम 'नहीं' पकाने की विधि 'के संबंध में पंक्ति संख्या मांग रहे हैं - यही कारण है कि आपको अच्छे नतीजे नहीं मिल रहे हैं, इसलिए' WHERE t2.Name <= t1.Name' का उपयोग करें –

उत्तर

16

यहाँ SQLite में पंक्ति संख्या प्राप्त करने के लिए एक रास्ता है परिणामी तालिका और फिर क्रमशः उन पंक्तियों की संख्या।

declare @resultrow int 

select 
     @resultrow = row_number() OVER (ORDER BY Name Asc) as 'Row Number' 
from Categories WHERE CategoryID = 'C_L776102U' 

select @resultrow 
+0

मुझे लगता है कि मैं ' मैं कुछ गलत कर रहा हूं या एक व्यवहारिक quirk लापता हूँ। मैं कौन सी आईडी का उपयोग करता हूं, इस पर निर्भर करता है कि पंक्ति संख्याएं अलग-अलग हैं, लेकिन इनमें से कोई भी मेरी अपेक्षा नहीं करता है। क्या आईडी कॉलम के रूप में तारों (टेक्स्ट) का उपयोग करने के साथ इसका कुछ संबंध हो सकता है? – Echilon

+0

आपने मेरी क्वेरी को 'क्यों कहा ...' कहां t2.RecipeID <= t1.RecipeID'? आपके प्रश्न में आप 'नाम 'नहीं' पकाने की विधि 'के संबंध में पंक्ति संख्या मांग रहे हैं - यही कारण है कि आपको अच्छे नतीजे नहीं मिल रहे हैं, इसलिए' WHERE t2.Name <= t1.Name' का उपयोग करें –

+0

यह ठीक काम करता है, धन्यवाद । कुंजी WHERE खंड में कॉलम द्वारा सॉर्ट करना है। – Echilon

-3

आप क्या कह रहे हैं दो अलग अलग तरीकों से समझाया जा सकता है, लेकिन मैं आप यह सोचते हैं रहा हूँ क्रमबद्ध करना चाहते हैं:

using (var cmd = conn.CreateCommand()) { 
     cmd.CommandText = string.Format(@"SELECT (SELECT COUNT(*) FROM Recipes AS t2    WHERE t2.RecipeID <= t1.RecipeID) AS row_Num 
       FROM Recipes AS t1 
       WHERE RecipeID = 'FB3XSAXRWD' 
       ORDER BY Name"; 
     cmd.Parameters.AddWithValue("@recipeId", id); 
     idx = Convert.ToInt32(cmd.ExecuteScalar()); 
+1

row_number() sqlite में उपलब्ध नहीं है –

0

यहां एक मजेदार चाल है जिसे आप मूल्यों के क्रम प्राप्त करने के लिए स्पेटियालाइट में उपयोग कर सकते हैं। यदि आप गिनती() फ़ंक्शन का उपयोग WHERE क्लॉज के साथ केवल मान> = वर्तमान मान तक सीमित करते हैं, तो गिनती वास्तव में ऑर्डर देगी। तो अगर मैं एक बिंदु परत कॉलम "मूल्य" के साथ "mypoints" और "val_order" तो कहा जाता है:

SELECT value, (
SELECT count(*) FROM mypoints AS my 
WHERE my.value>=mypoints.value) AS val_order 
FROM mypoints 
ORDER BY value DESC; 

मूल्यों के अवरोही क्रम देता है।

UPDATE mypoints SET val_order = (
SELECT count(*) FROM mypoints AS my 
WHERE my.value>=mypoints.value 
); 
संबंधित मुद्दे