none
sql manuel verdigimiz kolon adini cagirma RRS feed

  • Soru

  • select Distinct(CONVERT(varchar(50), Enbas) + ',' + Convert(varchar(50) ,Enson)) as [Kolon],OID,Price,ModelID from mtepe_SizePrice WHERE Kolon between 15 and 30 ModelID=55
    

    Merhaba arkdaslar yukarıda yazmıs oldugum sorgumda KOLON isimli tanımlamış oldugum kolon adinin içinde between ile arama yapıp aralıgıdaki degerleri getirmem gerekiyor nasıl yapa bilirim ?
    4 Ağustos 2011 Perşembe 10:46

Yanıtlar

Tüm Yanıtlar

  • SELECT  
    DISTINCT (Convert(VARCHAR(50), Enbas) + ',' + Convert(VARCHAR(50) ,Enson)) as [Kolon],
    OID,
    Price,
    ModelID 
    FROM mtepe_SizePrice 
    WHERE 
    Distinct(CONVERT(varchar(50), Enbas) + ',' + Convert(varchar(50) ,Enson)) BETWEEN 15 AND 30 
    AND ModelID=55
    



    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 11:41
  • SELECT 
    DISTINCT (Convert(VARCHAR(50), Enbas) + ',' + Convert(VARCHAR(50) ,Enson)) as [Kolon],
    OID,
    Price,
    ModelID 
    FROM mtepe_SizePrice 
    WHERE 
    Distinct(CONVERT(varchar(50), Enbas) + ',' + Convert(varchar(50) ,Enson)) BETWEEN 15 AND 30 
    AND ModelID=55
    
    



    http://www.mehmetx.com

    bu sekilde denedigimde . 90 - 99 un fiyatini ben 1500 Tl olarak geliyor

    Kullanıcı 91 ,92 93 94 95 96 97 98 99 gibi uzunluk olcusu sectiginde de bana 90-99 ID sinden dönen fiyatın gele bilmemsi için nasıl bir yöntem izlemeliyim.


    4 Ağustos 2011 Perşembe 12:00
  • biraz daha detaylı anlatır mısınız?


    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 12:09
  • CREATE TABLE [dbo].[mtepe_SizePrice](
    	[OID] [int] IDENTITY(1,1) NOT NULL,
    	[Heigth] [tinyint] NULL,
    	[Sol] [tinyint] NULL,
    	[Enbas] [tinyint] NULL,
    	[Enson] [tinyint] NULL,
    	[Price] [decimal](18, 0) NULL,
    	[ModelID] [int] NULL 
    )
    Tablo yapıp bu sekilde 
    


    Admin tarafindaki kullanıcı Urun eklerken bir  ölcü araligi belirmek zorunda

    100 cm ila 110 cm arasindaki fiyat araligi 1500 TL

    Olarak kaydediyoruz.

    -------------------------------------------------

    Son Kullanıcı Arayuzmuzde ise

     

    Son Kullanıcı sadece Ya 100 yada 110 a kadar ola bilen ardaşık sayılardan herhangi birini seçtiginde. Son Kullanıcı 101 ölcü degerini seçmiş ise  fiyat yine 1500 Tl olarak gelmesi gerekiyor

    Fiyatı aynı getire bilmem icin ne yapmalıyım

     


    4 Ağustos 2011 Perşembe 12:14
  • DECLARE @secilenDeger TINYINT
    SET @secilenDeger = 101
    
    SELECT 
    DISTINCT (Convert(VARCHAR(50), Enbas) + ',' + Convert(VARCHAR(50) ,Enson)) as [Kolon],
    OID,
    Price,
    ModelID 
    FROM mtepe_SizePrice 
    WHERE Enbas >= @secilenDeger AND Enson <= @secilenDeger 
    AND ModelID=55
    
    

    dener misiniz?
    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 12:44
  • DECLARE @secilenDeger TINYINT
    SET @secilenDeger = 101
    
    SELECT 
    DISTINCT (Convert(VARCHAR(50), Enbas) + ',' + Convert(VARCHAR(50) ,Enson)) as [Kolon],
    OID,
    Price,
    ModelID 
    FROM mtepe_SizePrice 
    WHERE Enbas >= @secilenDeger AND Enson <= @secilenDeger 
    AND ModelID=55
    
    

    dener misiniz?
    http://www.mehmetx.com
    Bu şekilde istedigim sonuca aslında ulasıyorum ama bazen sonuc gelıyor bazen ise gelmıyor neden ola bilir ?
    4 Ağustos 2011 Perşembe 13:35
  • sonuç gelen ve gelmeyen değerleri yazar mısınız?
    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 14:30
  • sonuç gelen ve gelmeyen değerleri yazar mısınız?
    http://www.mehmetx.com


    SET @secilenDeger = 13

    ModelID163 oldugunda gelmıyor

     

    SET @secilenDeger = 232 oldugunda gelıyor

    4 Ağustos 2011 Perşembe 14:43
  • Enbas ve Enson değerleri 13' ü kapsamıyorsa gelmeyecektir. ya da o modelID için uymuyordur, yani where koşulundaki ifadeye uyan satır olmadığı için gelmiyordur.


    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 14:45
  • iki degerde modelID sinde mevcut

    13 bana 100 cm degerini veriyor ben 99 Cm degerini 12 olarak tanımlıyorum bundan kaynaklanıyor ola bilirmi ?

    4 Ağustos 2011 Perşembe 14:48
  • WHERE Enbas >= @secilenDeger AND Enson <= @secilenDeger 
    AND ModelID=55
    
    

    dener misiniz?
    http://www.mehmetx.com
    Bu şekilde istedigim sonuca aslında ulasıyorum ama bazen sonuc gelıyor bazen ise gelmıyor neden ola bilir ?

    işaretler ters oldu sanırım, işaretleri aşağıdaki gibi değiştirip dener misiniz?

    WHERE Enbas <= @secilenDeger AND Enson >= @secilenDeger

    AND ModelID=55

     

     


    http://www.mehmetx.com
    4 Ağustos 2011 Perşembe 15:03
  • WHERE Enbas >= @secilenDeger AND Enson <= @secilenDeger 
    AND ModelID=55
    
    

    dener misiniz?
    http://www.mehmetx.com
    Bu şekilde istedigim sonuca aslında ulasıyorum ama bazen sonuc gelıyor bazen ise gelmıyor neden ola bilir ?

    işaretler ters oldu sanırım, işaretleri aşağıdaki gibi değiştirip dener misiniz?

    WHERE Enbas <= @secilenDeger AND Enson >= @secilenDeger

    AND ModelID=55

     

     


    http://www.mehmetx.com


    bu durumda deger geliyor ama iki deger birden geliyor

     bunu nasıl onleye bilirim ? gercek degeri aldıra bilmem icin


    4 Ağustos 2011 Perşembe 15:49
  • Gunyadın Mhmet bey, degişikligi yapıtıgımda sonuç geliyor ama hala iki kayıt gelıyor ve ilk degeri fiyat olarak yansıttıgından yanlış sonuç çıkıyor. ikileme veya üçelmeyei nasl öneleye biliriz

    5 Ağustos 2011 Cuma 06:03
  • Ferhat merhaba,

    tablodaki örnek kaydı ve almak istediğin sonucu net yazarsan daha iyi yardımcı olabiliriz bence. Şu değer için bu kayıt gelmeli ama diğer gelmemeli dediğin şartları da yazabilirsen sevinirim.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı
    5 Ağustos 2011 Cuma 06:28
  • Sonuc yukarıdaki resimde oldugu gibi donuyor

    DECLARE @secilenDeger TINYINT
    SET @secilenDeger = 13
    

    Olarak degirtidigimde sadece ilk satırda bulunan sonuc geliyor.

    5 Ağustos 2011 Cuma 06:40
  • Sanırım hangi EnBas alanına yakınsa onu almak istiyorsunuz. Örneğin BETWEEN yaparsanız 1,40 ve 13,48 gelecek.  Oysa 13,48'i almak istiyorsunuz Eğer böylese aşağıdaki gibi birşey yapabilirsiniz.

     

    SELECT

    TOP 1 Convert(VARCHAR(50), Enbas)+ ','+ Convert(VARCHAR(50) ,Enson) as [Kolon]

    ,

    OID

    ,Price,ModelID
     

    FROM

    #t1 WHERE @secilenDeger BETWEEN Enbas AND EnSon

    AND

    ModelID=163 ORDER BY @secilenDeger-Enbas


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı
    5 Ağustos 2011 Cuma 09:04
  • şöle bir durum söz konusu kullanıcı sadece bir tek deger sece biliyor between yapa bilmem için enbas ve enson deger sectirmem gerekmezmi ?
    5 Ağustos 2011 Cuma 09:39
  • WHERE Enbas > @secilenDeger AND Enson < @secilenDeger 
    AND ModelID=5163
    

    =' leri kaldırıp dener misiniz?
    http://www.mehmetx.com
    5 Ağustos 2011 Cuma 09:44
  • BETWEEN'i şu şekilde yazıyorsunuz.

    WHERE

    @secilenDeger BETWEEN Enbas AND EnSon

    burada görüldüğü gibi değerin kendisini BETWEENden önce yazıyorsunuz. Buraya takılmayın bence. Bunu Mehmet Yıldız'ın yazdığı gibi <= ve>= ile yapabilirsiniz. Zaten Between o anlama geliyor.

    Asıl sorununuzu çözen ORDER BY mantığını kurmak bence. Eğer aradığınız sonuç sizin SecilenDeger'e en yakın satır ise.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı
    5 Ağustos 2011 Cuma 09:47
  • Yardımlarınızdan dolayı Mehmet ve Ahmet cok teskur ederim. Sorunu helletim sayenizde :)

    7 Ağustos 2011 Pazar 12:55
  • çözümü yazabilirseniz, başkaları için de faydalı olabilir.
    http://www.mehmetx.com
    7 Ağustos 2011 Pazar 16:31
  • çözümü yazabilirseniz, başkaları için de faydalı olabilir.
    http://www.mehmetx.com
    DECLARE @secilenDeger TINYINT
    SET @secilenDeger = 101
    
    SELECT 
    DISTINCT (Convert(VARCHAR(50), Enbas) + ',' + Convert(VARCHAR(50) ,Enson)) as [Kolon],
    OID,
    Price,
    ModelID 
    FROM mtepe_SizePrice 
    WHERE Enbas >= @secilenDeger AND Enson <= @secilenDeger 
    AND ModelID=55
    
    
    
    

    Yukarıdaki kod ile sorunu helletim esaz sorun biraz yazilimsal durumdan kaynaklanıyormuş. projeyi yarında alınca ve cok fazla inceleme vaktimin olmadıgında sorunun sorguda oldugunu dusunurken yazılımsal bir  hatadan kaynaklandıgı ortaya çıktı ve YUKARIDA ki sorgu ile sorunu halletmiş oldum :)
    8 Ağustos 2011 Pazartesi 07:15