Forum

Sql sorgu için...
 
Bildirimler
Hepsini Temizle

Sql sorgu için yardım lütfen.

6 Yazılar
3 Üyeler
0 Likes
593 Görüntüleme
(@OnurAgici)
Gönderiler: 11
Active Member
Konu başlatıcı
 

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. 

 

 
Gönderildi : 12/10/2013 00:56

(@kenanilgun)
Gönderiler: 544
Üye
 

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)

 

 
Gönderildi : 12/10/2013 13:54

(@RecepHazer)
Gönderiler: 4
New Member
 

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--

 
Gönderildi : 13/10/2013 14:04

(@OnurAgici)
Gönderiler: 11
Active Member
Konu başlatıcı
 

Ö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.

 

 

 

 

 

 

  

 
Gönderildi : 16/10/2013 03:50

(@kenanilgun)
Gönderiler: 544
Üye
 

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.

 
Gönderildi : 16/10/2013 11:32

(@OnurAgici)
Gönderiler: 11
Active Member
Konu başlatıcı
 

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. 

 
Gönderildi : 19/10/2013 02:38

Paylaş: