View Full Version : نمایش Rowهای یک Query در کنار هم
  
AAtoZZ
یک شنبه 12 تیر 1390, 10:55 صبح
فرض کنید Tableای به این شکل وجود داره
SentenceNo SequenceNo    Word
1    1    Salam
1    2    Halet
1    3    Khobe?
1    4    Aghaye
2    1    Ali
2    2    Reza
2    3    Mohammadi
چطور میشه با Query کلمات هر جمله رو به ترتیب به هم متصل کرد و به این نتیجه رسید.
ُSalam Halet Khobe? Aghaye [S1]
Ali Reza Mohammadi [S2]]
اگر راهی به ذهنتون میرسه راهنمایی کنید.
چاره ای نباشه باید داخل برنامه (مثلا #C ) این کار رو انجام بدم که از جهت Resource پر هزینه است.:افسرده:
یوسف زالی
یک شنبه 12 تیر 1390, 11:35 صبح
سلام.
این رو تست کنید:
 
 
 
declare @t table(tID int, tData varchar(10))
insert into @t
values
(1,'salam '),
(1,'chetori '),
(2,'mersi '),
(1,'yousef?'),
(2,'azizam '),
(2,'khubam.')
declare @r table(rID int, rData varchar(100))
declare @x varchar(100)=''
declare @again bit= 1
declare @ID int= 0
while @again = 1
begin
set @ID =(
select distinct top 1 tID
from @t
where tID > @ID
order by tID
)
select @x = @x + tData
from @t
where tID = @ID
order by tID
insert into @r
select @ID, @x
where @ID is not null
select @again =@@ROWCOUNT,
@x =''
end
select*
from @r
 
 
 
خروجی :
1 salam chetori yousef?
2 mersi azizam khubam.
AAtoZZ
یک شنبه 12 تیر 1390, 12:09 عصر
تنها راهی که به ذهنم میرسید Curser بود.
خیلی ممنون از کمکتون.
من به کلمه ها ترتیب در یک جمله رو هم اضافه کردم تا موقعیتشون در جودل مهم نباشه.
موقع نمایش هم فاصله بین کلمات رو اضافه کردم
DECLARE @table table(tID int, SeqNo INT, tData varchar(10))
INSERT INTO @table values(1,3,'yousef?')
INSERT INTO @table values(1,1,'salam')
INSERT INTO @table values(1,2,'chetori')
INSERT INTO @table values(2,1,'mersi')
INSERT INTO @table values(2,2,'azizam')
INSERT INTO @table values(2,3,'khubam.')
-------------------------------------------------
DECLARE @temp table(rID int, rData varchar(100))
DECLARE @Sentence varchar(100)
SET @Sentence = ''
DECLARE @again BIT
SET @again = 1
DECLARE @ID INT
SET @ID = 0
WHILE @again = 1
BEGIN
    SET @ID =(SELECT DISTINCT TOP 1 tID
              FROM @table
              WHERE tID > @ID
              ORDER BY tID)
    
    SELECT @Sentence = @Sentence + CASE WHEN @Sentence <> '' THEN SPACE(1) ELSE '' END + tData
    FROM @table
    WHERE tID = @ID
    ORDER BY SeqNo
    
    INSERT INTO @temp
    SELECT @ID, @Sentence
    WHERE @ID is not null
     
    SELECT @again =@@ROWCOUNT,@Sentence =''
END
-------------------------------------------------
SELECT * FROM @temp
محمد سلیم آبادی
جمعه 17 تیر 1390, 21:07 عصر
اگه میخواهی با یک کوئری اینکار صورت بگیره و از نسخه ی 2005 به بالا بهرهمند هستین. راه ساده ForXmlPath هست که در مقاله زیر میتونید اونو پیدا کنید و با کمی تغییرات ازش استفاده کنید:
http://www.30sharp.com/article/13/214/11/%d8%a7%d9%84%d8%ad%d8%a7%d9%82-%d8%b3%d8%b7%d8%b1%d9%87%d8%a7%db%8c-%d8%ac%d8%af%d9%88%d9%84-concatenating-rows.aspx
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.