Union Sorgu İle Az İle Çoku Birleştirmek

21/04/2020, 16:32

accessman

iyi günler iki adet Sql listemiz var birisinde 
Kod:
SELECT Tmp.dyeri AS a, Tmp.Sayid AS b
FROM (SELECT TOP 10 tPersonel.dyeri, Count(tPersonel.id) AS Sayid FROM tPersonel GROUP BY tPersonel.dyeri HAVING (((tPersonel.dyeri) Is Not Null)) ORDER BY Count(tPersonel.id) DESC)  AS Tmp
ORDER BY Tmp.dyeri;
ile en fazla geçen yerlerden 10 tanesi alfabetik sıralı
diğer Sql listemizde 
Kod:
SELECT tPersonel.dyeri, Count(tPersonel.id)
FROM tPersonel
GROUP BY tPersonel.dyeri
ORDER BY Count(tPersonel.id) DESC;
 tüm yerler en sık geçme durumuna göre listeleniyor
şimdi bunları Union ile birleştirip
en sık geçen 3 eleman altına diğerlerini ekleyeceğiz
ilk 3 tane ve diğerleri kendi aralarında alfabetik listeli olacak
Kod:
ankara --   100
istanbul -   200
izmir   ---   150
adana  ---   3
adıyaman-- 5
afyon --6
ağrı -------  15
amasya --- 4
--------------> ankara üstte geçtiği için yok
antalya-- 25
şeklinde bir liste lazım
21/04/2020, 17:41

accessman

Kod:
SELECT Tmp.dyeri AS a, Tmp.Sayid AS b
FROM (SELECT TOP 10 tPersonel.dyeri, Count(tPersonel.id) AS Sayid FROM tPersonel GROUP BY tPersonel.dyeri HAVING (((tPersonel.dyeri) Is Not Null)) ORDER BY Count(tPersonel.id) DESC)  AS Tmp
ORDER BY Tmp.dyeri union
SELECT tPersonel.dyeri AS a, Count(tPersonel.id) AS b FROM tPersonel GROUP BY tPersonel.dyeri HAVING (((tPersonel.dyeri) Is Not Null));
şöyle yazınca da az ile çokları tek alfabetik listede birleştirdi
21/04/2020, 20:04

berduş

öncelikle dogumyeri alanı kısa metin olmalı uzun metin alanında sorun çıkarabilir
Top 10
SELECT Tmp.dyeri, Tmp.Sayid, *
FROM (SELECT TOP 10 tPersonel.dyeri, Count(tPersonel.id) AS Sayid FROM tPersonel GROUP BY tPersonel.dyeri HAVING (((tPersonel.dyeri) Is Not Null)) ORDER BY Count(tPersonel.id) DESC)  AS Tmp
ORDER BY Tmp.dyeri;
top 10 dışında kalanların sıralaması
SELECT tPersonel.dyeri, Count(tPersonel.id) AS Sayid
FROM tPersonel LEFT JOIN SqlTop ON tPersonel.dyeri = SqlTop.dyeri
WHERE (((SqlTop.dyeri) Is Null))
GROUP BY tPersonel.dyeri
HAVING ((Not (tPersonel.dyeri) Is Null));
2si Union all ile birleşiyor ama maalesef Unionlu sorguda top 10 kısmını alfabetik sıralamayı başaramadım
union içinde de sıralamaya çalıştım ama olmadı
belki bendeki ofis programından kaynaklı bir sorundur
select * from sqltop order by dyeri
UNION ALL
select * from sqldgr;
şeklinde union sorgusunu deneyebilirsiniz
22/04/2020, 23:20

berduş

Sorunuz cozume kavustu mu? Bahsettiğiniz kodu denediğimde tüm kayıtlar alfabetik olarak geldi, sizin istediğiniz böyle birşey değildi yanılmıyorsam?