Skip to main content

AccessTr.neT


Tablodaki Dikey Veriyi Sorguya Yatay Olarak Alma

Tablodaki Dikey Veriyi Sorguya Yatay Olarak Alma

#7
aşağıdaki sorgu kodunu dener misiniz?
TRANSFORM First(r.RaporEkibi) AS FirstOfRaporEkibi
SELECT r.Sira
FROM
(SELECT q.RaporTuru, q.RaporEkibi, (SELECT COUNT(*)
FROM (SELECT DISTINCT tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi
FROM tbl_Orders
WHERE tbl_Orders.Rapor="x"
ORDER BY tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi) AS q2
WHERE q2.RaporTuru = q.RaporTuru
AND q2.RaporEkibi < q.RaporEkibi
)+1 AS Sira
FROM (SELECT DISTINCT tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi
FROM tbl_Orders
WHERE tbl_Orders.Rapor="x"
ORDER BY tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi) AS q
ORDER BY q.RaporTuru, q.RaporEkibi) AS r
GROUP BY r.Sira
PIVOT r.RaporTuru In ("Kdv İade","Bağımsız Denetim","Tam Tasdik","Diğer Raporlar");

yada sorguyu parçalara ayırıp 3farklı sorgudan çekerek
1 - qryDistinctRaporEkibi
SELECT DISTINCT tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi
FROM tbl_Orders
WHERE tbl_Orders.Rapor="x"
ORDER BY tbl_Orders.RaporTuru, tbl_Orders.RaporEkibi;
2 - qryRankedRaporEkibi
SELECT q.RaporTuru, q.RaporEkibi, (SELECT COUNT(*)
FROM qryDistinctRaporEkibi AS q2
WHERE q2.RaporTuru = q.RaporTuru
AND q2.RaporEkibi < q.RaporEkibi
)+1 AS Sira
FROM qryDistinctRaporEkibi AS q
ORDER BY q.RaporTuru, q.RaporEkibi;
3 - Son Sorgu yani qrySon
TRANSFORM First(r.RaporEkibi) AS FirstOfRaporEkibi
SELECT r.Sira
FROM qryRankedRaporEkibi AS r
GROUP BY r.Sira
PIVOT r.RaporTuru In ("Kdv İade","Bağımsız Denetim","Tam Tasdik","Diğer Raporlar");
Cevapla
#8
2 yöntemde de temel sorun verilerin PIVOT r.RaporTuru In ("Kdv İade","Bağımsız Denetim","Tam Tasdik","Diğer Raporlar"); satırına bağımlı olması
ayrıca çoktan aza sıralamak için ("Kdv İade","Bağımsız Denetim","Tam Tasdik","Diğer Raporlar") sıralamasının da çoktan aza bir sırayla yazılması gerek
dolayısıyla rapor türü verileri değiştiğinde sorgu yanlış sonuçlar getirebilir. bu nedenle bu işlemin Vba ile yapılması daha doğru olur
Cevapla
#9
tek Sorgu halinde
TRANSFORM First(r.RaporEkibi) AS EkipAd
SELECT r.Sira
FROM (
SELECT q.RaporTuru, q.RaporEkibi, (
SELECT COUNT(*)
FROM tbl_Orders AS q2
WHERE q2.RaporTuru = q.RaporTuru
AND q2.RaporEkibi < q.RaporEkibi
AND q2.Rapor="x" )+1 AS Sira
FROM tbl_Orders AS q WHERE (((q.Rapor) = "x"))
) AS r
GROUP BY r.Sira
PIVOT r.RaporTuru IN ('Kdv İade','Bağımsız Denetim','Tam Tasdik','Diğer Raporlar');
sorgu oluşturma/güncelleme kodu
Sub DinamikPivotGuncelleYarat()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim xSQL As String
Dim pivotFields As String

Set db = CurrentDb()
xSQL = "SELECT RaporTuru " & _
"FROM tbl_Orders where (((Rapor)=""x"")) " & _
"GROUP BY RaporTuru " & _
"ORDER BY Count(RaporEkibi) DESC;"

Set rs = db.OpenRecordset(xSQL)

' PIVOT için kullanılacak sütunları oluştur
Do While Not rs.EOF
pivotFields = pivotFields & "'" & rs(0) & "',"
rs.MoveNext
Loop

If Len(pivotFields) > 0 Then pivotFields = Left(pivotFields, Len(pivotFields) - 1)

' sorgudaki PIVOT kısmı güüncellemek için
xSQL = "TRANSFORM First(r.RaporEkibi) AS EkipAd " & _
"SELECT r.Sira " & _
"FROM ( " & _
"SELECT q.RaporTuru, q.RaporEkibi, (SELECT COUNT(*) " & _
" FROM tbl_Orders AS q2 " & _
" WHERE q2.RaporTuru = q.RaporTuru " & _
" AND q2.RaporEkibi < q.RaporEkibi " & _
" AND q2.Rapor=""x"" " & _
" )+1 AS Sira " & _
"FROM tbl_Orders AS q " & _
"WHERE (((q.Rapor) = ""x"")) " & _
") AS r " & _
"GROUP BY r.Sira " & _
"PIVOT r.RaporTuru IN (" & pivotFields & ");"

On Error Resume Next
db.QueryDefs.Delete "SorguAdınız"
On Error GoTo 0

' Yeni sorgu oluştur
Dim qdf As DAO.QueryDef
Set qdf = db.CreateQueryDef("SorguAdınız", xSQL)
End Sub
Cevapla
#10
(17/02/2025, 19:16)berduş yazdı: tek Sorgu halinde
TRANSFORM First(r.RaporEkibi) AS EkipAd
SELECT r.Sira
FROM (
SELECT q.RaporTuru, q.RaporEkibi, (
SELECT COUNT(*)
FROM tbl_Orders AS q2
WHERE q2.RaporTuru = q.RaporTuru
AND q2.RaporEkibi < q.RaporEkibi
AND q2.Rapor="x" )+1 AS Sira
FROM tbl_Orders AS q WHERE (((q.Rapor) = "x"))
) AS r
GROUP BY r.Sira
PIVOT r.RaporTuru IN ('Kdv İade','Bağımsız Denetim','Tam Tasdik','Diğer Raporlar');
sorgu oluşturma/güncelleme kodu
Sub DinamikPivotGuncelleYarat()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim xSQL As String
Dim pivotFields As String

Set db = CurrentDb()
xSQL = "SELECT RaporTuru " & _
"FROM tbl_Orders where (((Rapor)=""x"")) " & _
"GROUP BY RaporTuru " & _
"ORDER BY Count(RaporEkibi) DESC;"

Set rs = db.OpenRecordset(xSQL)

' PIVOT için kullanılacak sütunları oluştur
Do While Not rs.EOF
pivotFields = pivotFields & "'" & rs(0) & "',"
rs.MoveNext
Loop

If Len(pivotFields) > 0 Then pivotFields = Left(pivotFields, Len(pivotFields) - 1)

' sorgudaki PIVOT kısmı güüncellemek için
xSQL = "TRANSFORM First(r.RaporEkibi) AS EkipAd " & _
"SELECT r.Sira " & _
"FROM ( " & _
"SELECT q.RaporTuru, q.RaporEkibi, (SELECT COUNT(*) " & _
" FROM tbl_Orders AS q2 " & _
" WHERE q2.RaporTuru = q.RaporTuru " & _
" AND q2.RaporEkibi < q.RaporEkibi " & _
" AND q2.Rapor=""x"" " & _
" )+1 AS Sira " & _
"FROM tbl_Orders AS q " & _
"WHERE (((q.Rapor) = ""x"")) " & _
") AS r " & _
"GROUP BY r.Sira " & _
"PIVOT r.RaporTuru IN (" & pivotFields & ");"

On Error Resume Next
db.QueryDefs.Delete "SorguAdınız"
On Error GoTo 0

' Yeni sorgu oluştur
Dim qdf As DAO.QueryDef
Set qdf = db.CreateQueryDef("SorguAdınız", xSQL)
End Sub

Teşekkürler Hocam
iyiki varsınız!
sağ olun, var olun
truhi, 29-09-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#11
Rica ederim
İyi çalışmalar
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task