Arkadaslar merhaba,
MS-Sql serverda su sekilde bir sorgum var ama sorgulanan alt kayit olmayinca hata aliyorum,
Select LOGICALREF as Kayit_no,
CODE As Stok_kodu,
NAME as Aciklama,
(Select NAME_RU From Lbs_db.Dbo.ITEMS_RU Where ((CODE_NEW=Stk_kart.CODE))) As Aciklama_ru,
(Select PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
(Select DEFINITION_ From Lbs_db.Dbo.LG_900_SPECODES Where ((SPECODETYPE=1) And (SPECODE=Stk_kart.SPECODE))) As Malin_cinsi,
ISNULL ((Select Sum(AMOUNT) From LBS_DB.DBO.LG_900_01_STLINE Where ((TRCODE in (1,2,3,13,14,25,50))) And (STOCKREF=Stk_kart.LOGICALREF) And (CANCELLED=0) AND ((SOURCEINDEX=0) AND (IOCODE IN(1,2)))),0) - ISNULL ((Select SUM(AMOUNT) From LBS_DB.DBO.LG_900_01_STLINE WHERE ((TRCODE in (6,7,8,11,12,25,51))) And (STOCKREF=Stk_kart.LOGICALREF) And (CANCELLED=0) And ((SOURCEINDEX=0) And (IOCODE IN(3,4)))),0) As Kalan
From Lbs_db.Dbo.LG_900_ITEMS as Stk_kart
Where (ISNULL ((Select Sum(AMOUNT) From LBS_DB.DBO.LG_900_01_STLINE Where ((TRCODE in (1,2,3,13,14,25,50))) And (STOCKREF=Stk_kart.LOGICALREF) And (CANCELLED=0) AND ((SOURCEINDEX=0) AND (IOCODE IN(1,2)))),0) - ISNULL ((Select SUM(AMOUNT) From LBS_DB.DBO.LG_900_01_STLINE WHERE ((TRCODE in (6,7,8,11,12,25,51))) And (STOCKREF=Stk_kart.LOGICALREF) And (CANCELLED=0) And ((SOURCEINDEX=0) And (IOCODE IN(3,4)))),0) > 0)
Order By Code
Bu sorgulamada
(Select PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
Satiri ile stok kartina ait Perakende tipli satis fiyatini stok karti ile beraber goruntulemek icin sorgulama yapiyorum ama malesef ornegin XXX kodlu malin satis fiyati sistemde yani o karta ait hic satis fiyati yok ise hata aliyorum hata ise sudur,
Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Bu satiri kaldirip calisitirinca problem yok ve ayrica tum kartlarda fiyat oluncada problem yok problem dedigim gibi alt sorgudan kayit donmedigi icin veya alt sorguda 1 taneden fazla kayit olduunda oluyor bu durumda ne yapmam lazim
Burhan Cakmak
Alt sorguda sorgulanan kaydin olmamasi durumunda alinan hata
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan
Arkadaslar hatanin tam kaynagi
(Select PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
Satirindan donen kayit sayisi 2 veya daha fazla bu nedenle problem veriyor ilgili stok kartini bulup 2 tane olan fiyati 1 taneye dusurunce problem kalkiyor ama bu sekilde cok problem var benim yapmam gereken bu gelen kayitlardan herhangi birisini secip almam lazim
burhan
(Select PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
Satirindan donen kayit sayisi 2 veya daha fazla bu nedenle problem veriyor ilgili stok kartini bulup 2 tane olan fiyati 1 taneye dusurunce problem kalkiyor ama bu sekilde cok problem var benim yapmam gereken bu gelen kayitlardan herhangi birisini secip almam lazim
burhan
kullandiginiz subquery'nin yeri geregi tek kayit donmesi gerekmekte ve sizin de tespit ettiginiz gibi ve zaten mesajda da aynen soyledigi gibi birden fazla kayit donmekte.
Burada eger tek kayit donmuyorsa ya sorgu tasariminda bir mantik hatası olabilir ya da dediginiz gibi bu kayıtlardan herhangi birini almanız isinizi goruyorsa o zaman max veya min foknsiyonlarından birini kullanabilirsiniz.
Ya da sorgu sonucundan sadece ilk kaydı almanızı saglayacak olan Sybase ASA icin first veya top 1 komutlarını kullanabilirsiniz. Bunların MsSQL 'de tam olarak nasıl kullanıldıklarından emin degilim. Gerci Sybase ASA helpinde Select Statement'in SQL/92 ve SQL/99 standardina uygun oldugu yaziyor ama denemek lazim.
ya da
Burada eger tek kayit donmuyorsa ya sorgu tasariminda bir mantik hatası olabilir ya da dediginiz gibi bu kayıtlardan herhangi birini almanız isinizi goruyorsa o zaman max veya min foknsiyonlarından birini kullanabilirsiniz.
Kod: Tümünü seç
(Select max(PRICE) From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
Kod: Tümünü seç
(Select Top 1 PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
Kod: Tümünü seç
(Select First PRICE From Lbs_db.Dbo.LG_900_PRCLIST Where ((CARDREF=Stk_kart.LOGICALREF) And (CLSPECODE='Perakende'))) As Fiyat,
-
- Üye
- Mesajlar: 143
- Kayıt: 15 Haz 2003 08:33
- Konum: Almaty, Kazakhstan