SQL

2016-04-10 14 views
0

denetimlerini gözden geçirin ve alanları denetleyin Daireleri/daireleri kiralama ile ilgili bilgileri içeren bir Oracle veritabanı oluşturdum. İlk olarak kaç öğrencinin ilk faturasını ödemediğini (yani bu alanda "null değil" kontrolünü) ve ikincisini ayrıntılarını gösterecek bir SQL betiği oluşturmaya çalışıyorum. İşte SQL

tablo FATURA denir verilerin bir örnektir:

+-----------+-------+---------------+---------------+----------------+--------+---------------+-------------+ 
| INVOICEID | PRICE | PAYMENTMETHOD | FIRSTREMINDER | SECONDREMINDER | RENTID | PAYMENTSTATUS | DATESENT | 
+-----------+-------+---------------+---------------+----------------+--------+---------------+-------------+ 
|   1 | 415 | Visa   | 10/FEB/2016 | -    |  1 | Paid   | 15/MAR/2016 | 
|   2 | 600 | Cash   | 15/FEB/2016 | -    |  2 | Unpaid  | 12/MAR/2016 | 
|   3 | 750 | Visa   | 10/FEB/2016 | 15/MAR/2016 |  1 | Paid   | 15/MAR/2016 | 
+-----------+-------+---------------+---------------+----------------+--------+---------------+-------------+ 

Bu verileri kullanarak, SQL deyimi tablodaki sayı 2 ayrıntılarını dönüp onları saymak gerekir.

Eğer bunun için yardım edebilecek biri varsa minnettar olurum çünkü nereden başlayacağımı bilmiyorum. SQL benim ana programlama dilim değil.

+0

PL/SQL yordamını istediğiniz ve düz bir SQL sorgusu istemediğiniz herhangi bir sebep var mı? Oracle profesyonelleri arasındaki mantra, "PL/SQL'de SQL'de yapamadığınız şeydir". Bunun, performansla ilgili olarak iyi nedenleri vardır, ancak nedenleriniz olabilir. – mathguy

+0

"Kaç öğrenciden" bahsediyorsunuz, ancak örnekleminizde belirli bir öğrenci verisi yok. Tablonuzda ayrıca bir student_id veya tenant_id sütun var mı, yoksa böyle bir şey var mı? Aksi halde kaç öğrenciyi saymak istersiniz? Her bir faturanın farklı bir öğrenci için olduğunu mu düşünüyorsunuz? – mathguy

+0

Yayını şimdi düzenledim, eğer mümkünse düz bir SQL ifadesi olmasını tercih ederim. – DaveDavidson

cevap

0

sorgu aşağıda fatura # 'ın RENTID başına sıralar ve ödenmemiş olan 1 faturalar seçmenize olanak verir: Sadece sayımı istiyorsanız

select * from (
    select *, 
     row_number() over (partition by rentid order by invoiceid) invoice_number 
    from mytable 
) t where invoice_number = 1 and paymentstatus = 'Unpaid' 

ardından select count(*)

select count(*) from (
    select *, 
     row_number() over (partition by rentid order by invoiceid) invoice_number 
    from mytable 
) t where invoice_number = 1 and paymentstatus = 'Unpaid' 
ile select * yerine

Faturanın 1. Fatura olup olmadığını belirlemek için secondreminder is null olup olmadığını denetlemenin başka bir yolu

select count(*) 
from mytable 
where secondreminder is null 
and paymentstatus = 'Unpaid' 
+0

bu, masaüstüm için korkmuyor. – DaveDavidson

+0

@DaveDavidson neden olmasın? – FuzzyTree

0
yeterli olacaktır görünüyor

...

sayımını almak için :

select count(*) from invoice where paymentstatus = 'Unpaid' 

bu satırlar için bilgi almak için: "

select * from invoice where paymentstatus = 'Unpaid' 

Bir bahsetti olduğunu null "bu alanda" kontrol et "- hangi alana atıfta bulunuyorsunuz? Paymentstatus sütunu yeterli değil mi?