2011-06-03 16 views
5

Ben bir tablo var düşünün:SQL - seçili kaydın hangi konum/sipariş/sayımı olduğunu nasıl belirlerim?

ID  field1  field2 
--- -------  ------ 
111  1   11113 
112  1   11114 
113  1   44321 
114  1   49339 
115  2   53234 

tüm kayıtlar field1 = 1 ilgilendiğim - ve özellikle field2 = 44321, ama bu durumda (field1=1 benim seçiminde ne pozisyon bilmek istiyorum, bu d 3).

SELECT * FROM table WHERE field1 = 1 ORDER BY id 

bana istediğim tüm kayıtları alacak ama 3 numaralı (44321 olduğunu seçiminde pozisyon olduğunu mu istiyorum Ne -, bilmek o sorguda 3 rekor istiyor bu 3).

Özellikle ilgi duyduğum satırın konumunu bulmak için yapabileceğim herhangi bir zarif sorgu var mı, yoksa imleci getirmeye ve kayıt kümemde dolaşıp bazı sayaçlarla iş bulmaya mı gerek var?

İstediğim alanı biliyorum1, istediğim alanı biliyorum2 - Sadece hangi pozisyonda olduğumu bilmek istiyorum field1 + field2 büyük alan1 = 1 sorgu - bu 3, pozisyon).

+0

Aradığınız kaydın konumunu verecektir. Hangi veritabanını kullanıyorsun, mysql? –

+1

Sorunun bir kopya olduğunu düşünüyorum: http://stackoverflow.com/questions/907438/can-i-get-the-position-of-a-record-in-a-sql-result-table –

+0

Etiketledim "tsql" olarak (SQL 2008). @Sid - haklısın. Başarısız olduğum yer bulamıyorum - "pozisyon", "sipariş", "sayım" - ama satır numarası değil. Teşekkürler. – Jason

cevap

6

bu deneyin:

POS sütunu yapabileceğiniz bazı motor spesifik yöntemler vardır sen

WITH qry AS 
(
    SELECT a.* 
       ROW_NUMBER() OVER(ORDER BY id) POS 
     FROM table a 
    WHERE field1 = 1 
) 
SELECT qry.pos 
    FROM qry 
WHERE field2 = 44321 
+0

Bir çekicilik gibi çalıştık, teşekkürler. – Jason

1
SELECT COUNT(*)+1 
FROM table 
WHERE ID<(SELECT TOP 1 ID 
      FROM table 
      WHERE field1=1 
      AND field2=44321) 
+1

Bu, küçük bir değişiklik ile çalışır, dış sorgu da field1 = 1 niteleyici gerektirir, aksi takdirde tablodaki her kaydı kapar. – Jason

+1

Yaratıcı programatik düşüncenizi seviyorum, ama - teşekkürler! – Jason