View Full Version : تجمیع مقادیر یکسان
mehdi58
سه شنبه 23 آبان 1391, 10:02 صبح
سلام دوستان
فرض کنید جدولی داریم که شامل دو ستون زیر است.
http://up.irantrack.com/images/bk78sidkups9yklu3l.jpg
حالا می خواهیم Query ای بنویسیم که خروجی اش به صورت زیر باشد:
http://up.irantrack.com/images/muo7rau7b6z0h78zmiio.jpg
baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 11:47 صبح
سلام می تونید از این روش استفاده کنید ... احتمالا بهترین روش نیست ....
select distinct(id),b from dbo.TestTable as t1 cross apply
(select Typ+',' from dbo.TestTable as t2 where t2.id=t1.id for xml path('')) temp(b)
mehdi58
سه شنبه 23 آبان 1391, 13:48 عصر
سلام می تونید از این روش استفاده کنید ... احتمالا بهترین روش نیست ....
select distinct(id),b from dbo.TestTable as t1 cross apply
(select Typ+',' from dbo.TestTable as t2 where t2.id=t1.id for xml path('')) temp(b)
با سپاس
اما با این روش باز هم به ازای هر ID فقط یک مقدار را با ویرگول بر می گرداند. چرا؟ نمی دانم!
baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 15:38 عصر
من اینو تست کردم ... با جدولی که اون بالا گفتن ... ممکنه دقیقا ساختار جدولتون رو اینجا قرار بدید ... !
mehdi58
سه شنبه 23 آبان 1391, 16:16 عصر
من اینو تست کردم ... با جدولی که اون بالا گفتن ... ممکنه دقیقا ساختار جدولتون رو اینجا قرار بدید ... !
CREATE TABLE myTable (ID int,typ char(1))
INSERT myTable Values(1,'a')
INSERT myTable Values(1,'b')
INSERT myTable Values(1,'c')
INSERT myTable Values(2,'b')
INSERT myTable Values(2,'c')
INSERT myTable Values(3,'c')
و خروجی باید به صورت زیر باشد:
http://up.irantrack.com/images/87fqkvfimixepups4109.jpg
البته با عرض پوزش در پست قبلی نتیجه تصویر کوئری را اشتباه ارسال کرده بودم.
baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 16:23 عصر
select distinct(id),b from dbo.myTable as t1 cross apply
(select typ+',' from dbo.myTable as t2 where t2.id=t1.id for xml path('')) temp(b)
من از SQL 2008 R2 استفاده می کنم شما نسخه SQL ات چی هست ؟
mehdi58
چهارشنبه 24 آبان 1391, 05:19 صبح
select distinct(id),b from dbo.myTable as t1 cross apply
(select typ+',' from dbo.myTable as t2 where t2.id=t1.id for xml path('')) temp(b)
من از SQL 2008 R2 استفاده می کنم شما نسخه SQL ات چی هست ؟
من از SQL 2005 استفاده می کنم.
mehdi.mousavi
چهارشنبه 24 آبان 1391, 06:14 صبح
سلام.
می تونیم اینکارو بدون استفاده از CROSS APPLY نیز بدین شکل انجام بدیم:
DECLARE @MyTable TABLE (
[Id] INT,
[Type] CHAR(1)
);
INSERT INTO @MyTable([Id], [Type])
VALUES
(1, 'a'),
(1, 'b'),
(1, 'c'),
(2, 'a'),
(2, 'b'),
(3, 'c')
SELECT [Id],
SUBSTRING((
SELECT (', ' + [Type])
FROM @MyTable t2
WHERE
t1.[Id] = t2.[Id]
FOR XML PATH('')
), 3, 512) AS [Types]
FROM @MyTable t1
GROUP BY [Id]
که خروجی این خواهد بود:
1 a, b, c
2 a, b
3 c
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.