Forum
Merhaba Arkadaşlar,
gruplama ve toplama ilgili yardımlarınıza ihtiyacım var.
Öncelikle ana ürüne alt reçeteler oluşturdum. Sipariş verilen ana ürün için alt ürün kadar üretim emri verilmesi gerekiyor. Ben döngüden kaçtane ana sipariş olduğunu görebiliyorum. Kaç adette ana siparişin reçete(alt siparişi) olabildiğini görebiliyorum). Aynı alt ürün birden fazla ana üründe kullanılabiliyor. Listeme yaparken aynı olan ürünleri tek kayıta düşürüp miktarınlarını toplamını aldırmak istiyorum.
stk | sta | id |
1 | ana ürün | 100 |
2 | ana ürün 2 | 200 |
id | stk | sta | gelenid | adet |
1 | 10 | alt ürün 1 | 100 | 2 |
2 | 20 | alt ürün 2 | 100 | 1 |
3 | 10 | alt ürün 1 | 200 | 3 |
4 | 30 | alt ürün 3 | 100 | 2 |
5 | 20 | alt ürün 2 | 200 | 1 |
Set uretim3 = conn.Execute("SELECT REF,STOKREF,STK,STA,MIKTAR from recete where ID='"&ID&"'")
Sipariş formunda 2 ana ürün var. "ana ürün" ve "ana ürün 2" de hem "1" ve "3" numaralı da kullanılmış. (üretim emri yazdırınca aynı alt üründen birden fazla yazmakta. Hem yanlış toplamayı önlemek hemde işi hızlandırmak için)
Ayrı ayrı yazılması yerine tek kayıt olarak gösterilip genel toplamının 5 olarak yazdırmak istiyorum.
SUM ve group by ile birkaç örnek yaptım 1 adet sipariş olunca zaten alt ürünler 2 kere yazılamayacağından sorun olmuyor. Fakat sipariş adeti artınca listemede tüm ürünleri gösterip tek kayıt indirmiyor ve toplama yapmıyor.
Lütfen konuyla ilgili yardımcı olabilirmisiniz.
sqlle epeydir uğraşmıyorum o yüzden tam anlamıyla yardımcı olamayacağım ama distinct komutunu araştırın hocam ilacınız o
Selam,
Biraz geç oldu ancak, benim anladığım sen group by kullanıyorsun ancak ana malzemenide grup içine dahil ettiğinden sana alt malzeme toplamını ana malzeme bazında veriyor buda bir alt malzemeden birden fazla gözükmesine neden oluyor.
Bu durumda yapılacak şey group by kısmını sadece alt malzeme ile yapacaksın, böylelikle ana malzemeden bağımsız olarak üretilecek tüm alt ürünleri sum layıp karşına getiricek tablon bu olacak ;
id | stk | sta | adet |
1 | 10 | alt ürün 1 | 5 |
2 | 20 | alt ürün 2 | 1 |
4 | 30 | alt ürün 3 | 2 |
5 | 20 | alt ürün 2 | 1 |
diğer türlü gelmesi zaten mantıksız. He ayrı bir tablo yapıp stok hareketlerinide orada tutarsın, böylelikle hangi ürüne hangi alt üründen ne kadar gitmişi oradan yakalarsın. Yani seni istediğin kısımı tek tabloda çözmek çokta mantıklı ve kullanışlı olmaz.
Umarım işine yarar,
İyi Günler Dilerim,
Merhabalar,
Cevabın için teşekkür ederim.
Muhasebe programı hazır olduğundan tabloları değiştiremiyorum ; stokgen,stokrecetesi,siparis tablolaları var.
ürüne reçete eklediğim zaman ürün id ile stokrecetesinie kayıt ediyor. Sipariş oluşturduğum zaman stokgen tablosundaki ürünleri seçip siparis tablosuna kayıt ediyor. siparis için kullanılacak reçeteleride şöyle çağırıyorum. ürün id stokrecetesindeki id ile uyusuyorsa reçete listeme sağlanıyor.
aslında tek veya birden fazla ürün id geldiğinde liste aynı stok ürünleriyle uzayıp gidiyor. bende döngüdeki değeleri or kullanarak tek listeylemiş gibi gösterip aynı listeleri toplatmak istiyorum.
<input type="checkbox" name="deger" value="<%=uretim("STOKP_ID" ) %>" checked>
For k = 1 To request.form("deger").Count
stokdeger=request.form("deger")(K)
gelenurunadi=request.form("sta")(K)
sipmaktartotal=request.form("sipmiktar")(K)
if stokdeger<> "" then
degisen = "STOKP_ID ='"& stokdeger &"'"
response.write(degisen& "<br>")
end if
if degisen <> "" then
ara = " OR "
end if
Set uretim3 = conn.Execute("SELECT DISTINCT STK,STA, SUM(MIKTAR) AS total from TSTOKRECETESI where "°isen&" "&ara&" "°isen&" GROUP BY STK,STA")
yukarıdaki detayda gelen deger (ürün id kadar) select where kullanıp listeleri toplatmak..
Aşağıdaki management açık hali var burada çalışıyor. döngüdekileri verileri aldırıyorum fakat sorguda kullandıramıyorum.
Set uretim35 = conn.Execute("SELECT DISTINCT STK,STA, SUM(MIKTAR) AS total from TSTOKRECETESI where STOKP_ID = '2009_17:05:56:156_3' OR STOKP_ID ='2010_14:29:30:930_9856' GROUP BY STK,STA")
İnceleyiniz;
DECLARE @p0 DateTime = '2016-11-13 12:00:00.000'
SELECT SUM([t0].[FiiliMiktar]) AS [Toplam]
FROM [SatışFaturasıDetay] AS [t0]
LEFT OUTER JOIN [SatışFaturası] AS [t1] ON [t1].[ID] = [t0].[BaseReferance]
LEFT OUTER JOIN [ÜrünHizmet] AS [t2] ON [t2].[ID] = [t0].[ÜrünHizmet]
WHERE ([t1].[KayıtTarihi]) > @p0
GROUP BY [t2].[Kodu]