Forum
Tablomda aşağıdaki bilgiler var;
sıra id --- doktor adı ---- Ameliyat Türü ---- Ürün kodu ----- adet
1 --- ahmet ----- omuz ---- a ----- 5
2 --- ahmet ----- omuz ---- b ----5
3 --- ahmet ---- diz ----- f -----2
4 --- mehmet --- kalça --- d ---1
5 --- recep ---- omuz --- r ---1
Yapmak istediğim bir sorguyla aşağıdaki sonucu almak istiyorum.
doktor adı ----- A.tür1(omuz) ---- A.tür2(diz) ---- Atür3 (kalça)
ahmet ----- 2(ameliya sayısı) ---- 1 ---- 0(yada null)
mehmet ----- 0 ---- 0 ---- 1
recep ----- 1 --- 0 ---- 0
Öncelikle ameliyat türüne göre toplam yapacak sonrada yukarıdaki gibi bir sıralama vermesini istiyorum.
Yardım ederseniz çok sevinirim.
Merhaba, Aşağıdaki sorgu işinizi görecektir.
İyi çalışmalar.
SELECT
D.*, COALESCE(T_omuz.adet, 0) AS adet_omuz, COALESCE(T_diz.adet, 0) as adet_diz, COALESCE(T_kalca.adet, 0) AS adet_kalca
FROM
(
SELECT
A.doktor
FROM
ameliyat A
GROUP BY A.doktor
) AS D
LEFT OUTER JOIN (
SELECT
doktor, tur_ameliyat, COUNT(id) AS adet
FROM
ameliyat
WHERE
tur_ameliyat = 'omuz'
GROUP BY doktor, tur_ameliyat
) T_omuz ON(T_omuz.doktor = D.doktor)
LEFT OUTER JOIN (
SELECT
doktor, tur_ameliyat, COUNT(id) AS adet
FROM
ameliyat
WHERE
tur_ameliyat = 'diz'
GROUP BY doktor, tur_ameliyat
) T_diz ON(T_diz.doktor = D.doktor)
LEFT OUTER JOIN (
SELECT
doktor, tur_ameliyat, COUNT(id) AS adet
FROM
ameliyat
WHERE
tur_ameliyat = 'kalça'
GROUP BY doktor, tur_ameliyat
) T_kalca ON(T_kalca.doktor = D.doktor)
declare @tAmeliyat table ([sıra id] int,[doktor adı] nvarchar(100), [Ameliyat Türü] nvarchar(100),[Ürün Kod] nvarchar(100),[adet] int)
insert into @tAmeliyat
select 1,'ahmet','omuz','a',5
union all
select 2,'ahmet','omuz','b',5
union all
select 3,'ahmet','diz','f',2
union all
select 4,'mehmet','kalça','d',1
union all
select 5,'recep','omuz','r',1
select * from @tAmeliyat
--sizin kullanacağınız kısım--
select [doktor adı],
SUM(case when [Ameliyat Türü]='omuz' then 1 else 0 end ) as [A.tür1] ,
SUM(case when [Ameliyat Türü]='diz' then 1 else 0 end ) as [A.tür2] ,
SUM(case when [Ameliyat Türü]='kalça' then 1 else 0 end ) as [A.tür3]
from @tAmeliyat group by [doktor adı] order by [doktor adı]
--sizin kullanacağınız kısım--
Öncelikle araya bayram girdiği için verdiğiniz cevapları incelemekte geciktim bunun için kusura bakmayın. Zahmet edip cevap verdiğiniz için çok teşekkür ederim.
sorduğum soruya göre verdiğiniz cevaplar doğru ancak ben soruyu yeterince anlatamamışım.Şimdi orjinal tablomdan bir parçayı paylaşacağım sanırım en doğrusu bu sizi de bu sayede fazla uğraştırmıyacağım, bir daha kontrol edip yardım ederseniz çok sevinirim.
Tarih | SıraNo | HastaAdı | Hastane | DotrAdı | AmeTür1 | AmeTür2 |
27.09.2013 | 4387 | ÖZLEM | A | TURHAN | MENİSKÜS TAMİRİ | |
27.09.2013 | 4387 | ÖZLEM | A | TURHAN | MENİSKÜS TAMİRİ | |
27.09.2013 | 4387 | ÖZLEM | A | TURHAN | MENİSKÜS TAMİRİ | |
27.09.2013 | 4387 | ÖZLEM | A | TURHAN | MENİSKÜS TAMİRİ | |
27.09.2013 | 4388 | MERVE | B | ADNAN | TEK BANT ACL | |
27.09.2013 | 4388 | MERVE | B | ADNAN | TEK BANT ACL | |
27.09.2013 | 4388 | MERVE | B | ADNAN | TEK BANT ACL | |
27.09.2013 | 4388 | MERVE | B | ADNAN | TEK BANT ACL | |
27.09.2013 | 4389 | YILMAZ | C | HAKAN | TEK BANT ACL | |
27.09.2013 | 4389 | YILMAZ | C | HAKAN | TEK BANT ACL | |
27.09.2013 | 4389 | YILMAZ | C | HAKAN | TEK BANT ACL | |
27.09.2013 | 4390 | AYDIN | D | YAMAN | TEK BANT ACL | MENİSKÜS TAMİRİ |
27.09.2013 | 4390 | AYDIN | D | YAMAN | TEK BANT ACL | MENİSKÜS TAMİRİ |
27.09.2013 | 4390 | AYDIN | D | YAMAN | TEK BANT ACL | MENİSKÜS TAMİRİ |
27.09.2013 | 4390 | AYDIN | D | YAMAN | TEK BANT ACL | MENİSKÜS TAMİRİ |
27.09.2013 | 4390 | AYDIN | D | YAMAN | TEK BANT ACL | MENİSKÜS TAMİRİ |
Sonuç | ||||||
DotrAdı | MENİSKÜS TAMİRİ | TEK BANT ACL | ||||
TURHAN | 1 | 0 | ||||
ADNAN | 0 | 1 | ||||
HAKAN | 0 | 1 | ||||
YAMAN | 1 | 1 |
|
Sizlerin verdiği cevapta herbir ameliyat türünü topluyor ancak benim doktor adı , hasta adı veya tarihe göre kıstaslayarak grup olarak
toplma yapmam gerekiyor yukarıdaki örneğe bakarsanız. Turhan isimli doktor aslında 1 adet menisküs ameliyatı yapmış. Tabloya eklemediğim
Ürün kodu ve kullanılan adet olduğu için aslında her bir satır Doktor Turhanın hasta Özleme kullandığı farklı malzemeleride göstermekte. Bu sebeple Doktor Turhan 1 Adet menisküs tamiri yapmıştır.
Ameliyat türü olarak 29 seçenek var ve hemen hemen hepsi kullanılmakta. Sizlerin verdiği kodlarda benim yine eksik anlatmam yüzünden üç seçeneğide yazarak çözümlemişsiniz. Benim için efektif olan çözüm bu listede ameliyat türlerinin de sorgulama tekniği içinde otomatik bulunması.
Son olarakta AmeTür1 ve AmeTür2 var bunun anlamıda aynı hastaya Tek bir ameliyatta birden fazla Ameliyat Türünün uygulandığı anlamına geliyor.
Konu karışık olduğu için ancak bu kadar anlatabiliyorum. Yardımlarınız için şimdiden teşekkür ederim.
İyi bayramlar.
Merhaba,
Verdiğim cevapta "GROUP BY doktor, tur_ameliyat" kısmını değiştirerek ve "SELECT doktor, tur_ameliyat, COUNT(id) AS adet" kısmına gruplanan tarihi eklerseniz sorgunun en üsttünden alabilirsiniz. Eğer ki soldan sağa doğru tüm ameliyat türlerini çıkartmak istiyorsanız temp table ile ilk önce bir tablo yapısı çıkartarak sorgulanan sorgunun ameliyat türlerini aldıktan sonra temp tablonuzdaki soldan sağa sütun yapısını çıkarıp gerekli sütunlarınızı ekleyebilirsiniz. Bu örnekte Recep beyin sql sorgusuna benzemektedir.
Cevabınız için teşekkür ederim. Temp table çözümünü daha önce kullanmamıştım. İnceleyip bir çözüm üretmeye çalışacağım. İlginiz için tekrar teşekkürler.