lostyazilim
tr.link

MSSQL group by Yardım edebilecek biri varmıdır?

3 Mesajlar 1.287 Okunma
lstbozum
tr.link

CineArsiv CineArsiv WM Aracı Kullanıcı
  • Üyelik 13.02.2014
  • Yaş/Cinsiyet 44 / E
  • Meslek Web master
  • Konum İstanbul Avrupa
  • Ad Soyad E** İ**
  • Mesajlar 116
  • Beğeniler 3 / 33
  • Ticaret 2, (%100)
Selam arkadaşlar şöyle bir sorunum var :
Bir tabloda
id - icerik groupid
1 - içerik1 1
2 - içerik2 1
3 - içerik3 1
4 - içerik4 2
5 - içerik5 2

Şeklinde tablomvar istediğim şeyse groupid ye göre her grouptan en son girilen içerikleri listelemek yani groupid 1 olandan en son içerik groupid 2 olandan en son içerikleri listelemek istiyorum.

şöyle bişey ama bu işime yaramıyor

select groupid from tbl
group by groupid

ben tablodaki tüm verileri çekmek istiyorum ama sadece her groupid den 1 tane gelmeli
yani

select * from tbl
group by groupid

gibi ama buda group by kısmına yazdığından başkasını select kısmına yazamıyorsun e benim tablomda biraz genis tüm verilere ihtiyacım var nasıl yapabilirim?
 

 

wmaraci
reklam

monelogg monelogg <> Kullanıcı
  • Üyelik 06.03.2014
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğrenci
  • Konum Diğer
  • Ad Soyad M** B**
  • Mesajlar 658
  • Beğeniler 78 / 125
  • Ticaret 0, (%0)
Merhaba, SQL Server bilgisayarımda yüklü olmadığı için deneme şansım olmadı, aşağıdaki komutları yazdım, belki işinizi görür.


USE veri_tabani
DECLARE @a INT

CREATE TABLE #gecici_tablo
(
id INT,
icerik NVARCHAR(MAX),
groupid INT
)

SET @a=1
WHILE @a <= SELECT MAX(groupid) FROM tablo
BEGIN
INSERT INTO gecici_tablo VALUES(SELECT * FROM tablo WHERE groupid=@a AND id=MAX(id))
SET @a=@a+1
END

SELECT * FROM #gecici_tablo


Özetle groupid değerlerini sırayla buluyor, id değeri en büyük olanı geçici tabloya ekliyor. Sonra geçici tablodaki verileri listeliyor.

Kolay gelsin.
 

 

CineArsiv CineArsiv WM Aracı Kullanıcı
  • Üyelik 13.02.2014
  • Yaş/Cinsiyet 44 / E
  • Meslek Web master
  • Konum İstanbul Avrupa
  • Ad Soyad E** İ**
  • Mesajlar 116
  • Beğeniler 3 / 33
  • Ticaret 2, (%100)

monelogg adlı üyeden alıntı

Merhaba, SQL Server bilgisayarımda yüklü olmadığı için deneme şansım olmadı, aşağıdaki komutları yazdım, belki işinizi görür.


USE veri_tabani
DECLARE @a INT

CREATE TABLE #gecici_tablo
(
id INT,
icerik NVARCHAR(MAX),
groupid INT
)

SET @a=1
WHILE @a <= SELECT MAX(groupid) FROM tablo
BEGIN
INSERT INTO gecici_tablo VALUES(SELECT * FROM tablo WHERE groupid=@a AND id=MAX(id))
SET @a=@a+1
END

SELECT * FROM #gecici_tablo


Özetle groupid değerlerini sırayla buluyor, id değeri en büyük olanı geçici tabloya ekliyor. Sonra geçici tablodaki verileri listeliyor.

Kolay gelsin.



Hocam ilgine teşekkür ederim çalıştıramadım bu kodu şöyle bir hata veriyor.
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.



Bende sql e ekstra bir yük getirmesine rağmen functionlarla çözdüm belki birinin işine yarar diye yazıyorum




create function [dbo].[denemebul] (@grupid int)
returns varchar(150)
as
begin
declare @sonuc varchar(150)
set @sonuc = (select top 1 icerik1 from tbl where grupid = @grupid order by Tarih desc)
return @sonuc
end


create proc [dbo].[deneme1]
as
begin
select grupid,
dbo.denemebul (grupid) as id,
dbo.denemebul2 (grupid) as icerik1,
dbo.denemebul1 (grupid) as icerik2,
dbo.denemebul3 (grupid) as icerik3,
from tbl
group by grupid
end




monelogg

kişi bu mesajı beğendi.

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al