Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sıralama
#1
Selamlar, Db'den verileri tarihe ve sonrasında sıra numarasına göre listeliyorum fakat ayrıca (TR) veya (NT1) ilk sırada gelecek şekilde nasıl yapabilirim? 



     
Close;
      SQL.Clear;
      SQL.Add('Select * From URUNLER Where NOTLAR IN(:NT1, :NT2)');
      SQL.Add('And URUNADIADI Like ' + QuotedStr('%' + TSeach.Text + '%'));
      SQL.Add('And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO');
      ParamByName('NT1').AsString := 'TR';
      ParamByName('NT2').AsString := 'HB';
      ParamByName('TRH1').AsDate := StrToDate(ComboDateBasla.Text);
      ParamByName('TRH2').AsDate := StrToDate(ComboDateBitis.Text);
      Prepared := True;
      Open;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Ben sorunuzu tam olarak anlayamadım. TR veya NT1 ilk sıraya gelsin ne demek?
NT1 Fieldin adı, TR ise Fieldin değeri.
Yeni Nesil Yazılımcı
Linkedin: https://tr.linkedin.com/in/barisatalay07
WWW
Cevapla
#3
(09-01-2017, Saat: 09:29)barisatalay Adlı Kullanıcıdan Alıntı: Ben sorunuzu tam olarak anlayamadım. TR veya NT1 ilk sıraya gelsin ne demek?
NT1 Fieldin adı, TR ise Fieldin değeri.

Selam, iki tarih arasında listeleme yaparken TR olanların Order By ile listelemede üste HB olanlar ise sıralamada alta olacak.


      Close;
      SQL.Clear;
      SQL.Add('Select * From URUNLER Where NOTLAR IN(:NT1, :NT2)');
      SQL.Add('And URUNADIADI Like ' + QuotedStr('%' + TSeach.Text + '%'));
      SQL.Add('And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO');
      ParamByName('NT1').AsString := 'TR';
      ParamByName('NT2').AsString := 'HB';
      ParamByName('TRH1').AsDate := StrToDate(ComboDateBasla.Text);
      ParamByName('TRH2').AsDate := StrToDate(ComboDateBitis.Text);
      Prepared := True;
      Open;

Umarım anlatabilmişimdir.
Hayat bazen güzel olabiliyor.
Cevapla
#4
Merhaba,
İki farklı SQL cümle sonucu Union ile birleştirerek yapılabilir. 

    Close;
   SQL.Clear;
   SQL.Text :=
     'Select * From URUNLER Where NOTLAR = :NT1 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO'+ #13#10
     + 'union all' + #13#10 +
     'Select * From URUNLER Where NOTLAR = :NT2 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO';
   ParamByName('ARA').AsString := QuotedStr('%' + TSeach.Text + '%');
   ParamByName('NT1').AsString := 'TR';
   ParamByName('NT2').AsString := 'HB';
   ParamByName('TRH1').AsDate := StrToDate(ComboDateBasla.Text);
   ParamByName('TRH2').AsDate := StrToDate(ComboDateBitis.Text);
   Prepared := True;
   Open;
Delphi Can'dır!
WWW
Cevapla
#5
Cevap kesmemiş
http://www.delphiturkiye.com/forum/viewt...=2&t=36457
WWW
Cevapla
#6
(09-01-2017, Saat: 16:44)yhackup Adlı Kullanıcıdan Alıntı: Cevap kesmemiş
http://www.delphiturkiye.com/forum/viewt...=2&t=36457


Selamlar; Ne demek istediğinizi ve amacınızı anlayamadım delphican konuya cevap yazılmadan önce delphitürkiye ye zaten konuyu açmıştım kaldı ki bu forma konu açtım diye farklı bir forma konu açılamaz diye bir şey mi var? lütfen gereksiz yere polemik yaratmayın

Selam.

ERROR: ORDER BY clause should come after UNION ALL not before'. Process Siparis.exe (4908)

Hatası alıyorum.

(09-01-2017, Saat: 16:31)DelphiCan Adlı Kullanıcıdan Alıntı: Merhaba,
İki farklı SQL cümle sonucu Union ile birleştirerek yapılabilir. 

    Close;
   SQL.Clear;
   SQL.Text :=
     'Select * From URUNLER Where NOTLAR = :NT1 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO'+ #13#10
     + 'union all' + #13#10 +
     'Select * From URUNLER Where NOTLAR = :NT2 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO';
   ParamByName('ARA').AsString := QuotedStr('%' + TSeach.Text + '%');
   ParamByName('NT1').AsString := 'TR';
   ParamByName('NT2').AsString := 'HB';
   ParamByName('TRH1').AsDate := StrToDate(ComboDateBasla.Text);
   ParamByName('TRH2').AsDate := StrToDate(ComboDateBitis.Text);
   Prepared := True;
   Open;
Hayat bazen güzel olabiliyor.
Cevapla
#7
Bug 
(09-01-2017, Saat: 19:41)Dostk Adlı Kullanıcıdan Alıntı:
(09-01-2017, Saat: 16:44)yhackup Adlı Kullanıcıdan Alıntı: Cevap kesmemiş
http://www.delphiturkiye.com/forum/viewt...=2&t=36457


Selamlar; Ne demek istediğinizi ve amacınızı anlayamadım delphican konuya cevap yazılmadan önce delphitürkiye ye zaten konuyu açmıştım kaldı ki bu forma konu açtım diye farklı bir forma konu açılamaz diye bir şey mi var? lütfen gereksiz yere polemik yaratmayın

Selam.

ERROR: ORDER BY clause should come after UNION ALL not before'. Process Siparis.exe (4908)

Hatası alıyorum.

(09-01-2017, Saat: 16:31)DelphiCan Adlı Kullanıcıdan Alıntı: Merhaba,
İki farklı SQL cümle sonucu Union ile birleştirerek yapılabilir. 

    Close;
   SQL.Clear;
   SQL.Text :=
     'Select * From URUNLER Where NOTLAR = :NT1 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO'+ #13#10
     + 'union all' + #13#10 +
     'Select * From URUNLER Where NOTLAR = :NT2 And URUNADIADI Like :ARA And TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC, SIRANO';
   ParamByName('ARA').AsString := QuotedStr('%' + TSeach.Text + '%');
   ParamByName('NT1').AsString := 'TR';
   ParamByName('NT2').AsString := 'HB';
   ParamByName('TRH1').AsDate := StrToDate(ComboDateBasla.Text);
   ParamByName('TRH2').AsDate := StrToDate(ComboDateBitis.Text);
   Prepared := True;
   Open;

"Db'den verileri tarihe ve sonrasında sıra numarasına göre listeliyorum" demişsiniz ama veritabanının türü nedir ?
Size cevap olarak verilen SQL kodunu herhangi bir SQL client programında test ettiniz mi ?
Gelen hata mesajını anlamaya, yorumlamaya çalıştınız mı ?
Google'da "ORDER BY clause should come after UNION ALL not before" hata mesajını aratıp, çıkan sonuçları hiç incelediniz mi ?

Belki beni de yanlış anlayacaksınız ama yine yazmadan edemedim.
One of the major software engineering challenges is managing change.
Cevapla
#8
Eğer MSSQL kullanılıyor ise MSSQL de UNION ALL kullanımında ORDER BY komutuna sadece son satırda izin verir.. 
SubQuery ile de halledilebilir ama benim tavsiyem Common Table Expressions subQuery e göre performansı biraz daha iyi.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#9
Merhaba,

SQL kodunu aşağıdaki gibi yazmanız yeterli:

[Ars=delphi]SELECT * FROM URUNLER
ORDER BY
 CASE
   WHEN Notlar = 'TR' THEN 1
   WHEN Notlar = 'NT1' THEN 2
   ELSE 3
 END,
 Notlar[/ars]
Bu şekilde 'TR' olanlar 1. sırada, 'NT1' olanlar ikinci sırada, diğerleri de alfabetik olacak. 

İyi çalışmalar
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Mysql Büyükten Küçüğe Sıralama Sorunu hakanharbeli 8 4.726 26-01-2023, Saat: 10:35
Son Yorum: yhackup
  Dbgrid Drag&Drop İle Satır Sıralama TheEAK 6 2.872 18-03-2021, Saat: 14:50
Son Yorum: TheEAK
  Fastreport Masterdata column aşağı doğru yanyana sıralama klavye 6 3.000 15-10-2020, Saat: 16:42
Son Yorum: serdar
  manuel sıralama query info@guzelceker.com 3 2.000 20-06-2020, Saat: 19:55
Son Yorum: mrmarman
  array of record Sıralama yhackup 2 2.058 27-12-2019, Saat: 16:43
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi