Forum
alter table #Personel
(
Ad varchar(100)
)
alter table #Masa
(
MasaAdi varchar(100)
)
insert into #Personel values('deneme1'),('deneme2'),('deneme3')
insert into #Masa values('Masa1'),('masa2'),('masa3')
select Ad,MasaAdi from
(
select ROW_NUMBER() over(partition by MasaAdi order by ID,Ad ) as Sira,ID,Ad,MasaAdi
from (
select newid() as ID,Ad,MasaAdi from #Personel
left outer join #Masa on 1=1
)t
) t2 where Sira = 1 order by Ad
Arkadaşlar sanal table mantığıyla kartezyen çarpım sorgusu oluşturmaya çalışıyorum, ama hata veriyor . hatam nerde ?
Merhaba,
Kodunuzu SQL Server 2008 üzerinde denedim.Hata almadım.Hangi DBMS versiyonunu kullanıyorsun?
select Ad,MasaAdi from
(
select ROW_NUMBER() over(partition by MasaAdi order by ID,Ad ) as Sira,ID,Ad,MasaAdi
from (
select newid() as ID,Ad,MasaAdi
from #Personel
cross join #Masa
)t
) t2 where Sira = 1 order by Ad
bu query kullandım.Herhangi bir hata almadım.Burada cross join olarak kullanmak daha iyi bir syntax kullanımı olacaktır.Aynı şekilde SQL Server 2008 üzerinde bu sorgu aynı sonucu veriyor.
Saygılar,
Sql 2005 kullanıyorum ve aşağıda ki hatayı veriyor.
Msg 102, Level 15, State 1, Line 10
Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near ','.
Ben bu örneği başka sql örneğinden editleyerek buldum sorduğum kişiler kod tasarımı normal dediği halde bende yukarıda ki hatayı veriyor
Senin problemin select statement ile ilgili değildir.SQL Server 2008 içinde gelen özellikle multiple değerleri yukarıdaki deyim içinde eklenebiliyor.Fakat bunu SQL Server 2005 için kullanmak istiyorsanız o zaman ;
insert into #Personel values('deneme1')
insert into #Personel values('deneme2')
insert into #Personel values('deneme3')
insert into #Masa values('Masa1')
insert into #Masa values('masa2')
insert into #Masa values('masa3')
gibi kullanmalısınız.
Saygılar,
insert into #Personel values('deneme1')
insert into #Personel values('deneme2')
insert into #Personel values('deneme3')
insert into #Masa values('Masa1')
insert into #Masa values('masa2')
insert into #Masa values('masa3')
select Ad,MasaAdi from
(
select ROW_NUMBER() over(partition by MasaAdi order by ID,Ad ) as Sira,ID,Ad,MasaAdi
from (
select newid() as ID,Ad,MasaAdi
from #Personel
left outer join #Masa on 1=1
)t
) t2 where Sira = 1 order by Ad
Selehattin Bey Çok teşekkür ederim sorgum sorunsuz bi r bçimde çalıştı. Fakat Benim aklıma takılan bir sorum daha var örneğin
Personel listesinden bazı kişiler 2 şer kere farklı masalara oturuyor. mesala
deneme1 -- masa2
deneme2 -- masa3
deneme1 -- masa1 gibi
ben her personelin her masaya ayrı ayrı oturmasını nasıl sağlayabilirm
Sorunu anlamak biraz zor gibi.Öncelikle bize örnek bir veri girişi ve bununla ne tür veri çıkışı istediğini örnek veri olarak sağlarmısın?
personeller deneme olarak adlandırılmıştır
Açıkça anlatmak gerekirse şu anda bu kodla aşağıda ki gibi bir çıktı oluşuyor,
deneme1 - masa2
deneme2 - masa3
deneme1 - masa1 gibi sonuç meydana geliyor. aynı personel 2 defa farklı masalara dağalabiliyor. bu da mantık hatasından doğan iş aksaklıklarına yol açıyor. mantık olarakta doğru olan benimde yapmak istediğim,
deneme1-masa2
deneme2-masa3
deneme3-masa1 her personele farklı masaları payşaltırmak aynı personeli farklı masalara dağıtmak değil
Tabi bu sadece işin başlangıçı ilerde dönüşü olmayan mantık hatalarına yol açmasın diye en küçük koddan başlayarak test etmek gerekiyor.
doğru anlatabilmişimdir umarım.
Anladığım kadarıyla unique random atama yapmasını istiyorsunuz.Bunun için kullanma gereken sorgu;
with
cte1 as
(
select *, row_number() over(order by newid()) RowNumber
from #Personel
),
cte2 as
(
select *, row_number() over(order by newid()) RowNumber
from #Masa
)
select cte1.Ad, cte2.MasaAdi
from cte1
join cte2 on
cte1.RowNumber = cte2.RowNumber
Saygılar,
Selehattin Bey verdiğiniz örneği sorguya entegre edemedim, sorgu üzerinden anlatabilirmisiniz?