PDA

View Full Version : تبدیل ستون به سطر



sg.programmer
یک شنبه 19 آذر 1396, 22:35 عصر
سلام من یک جدول به صورت زیر دارم

Name | Famil
-------------------
a | b
-------------
a | c
-------------
m | b
-------------
a | k
-------------
m | l
-------------
m | f
-------------
s | b

میخوام سطر های که نامشان یکی هست ، فامیلی ها در یک ستون و با خط تیره جدا شده و کنار هم قرار بگیرن :

Name | Famil
-------------
a | b-c-k
------------
m | b-l-f
----------------
a | b


میدونم از FOR XML PATH هست و قبلا سمپل هاشو دیدم ولی الان برای دو ستونی پیدا نکردم؟

sg.programmer
دوشنبه 20 آذر 1396, 21:37 عصر
Test Data

DECLARE @Table1 TABLE(ID INT, Value INT)
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400)
Query

SELECT ID
,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
FROM @Table1
WHERE ID = t.ID
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @Table1 t
GROUP BY ID
Result Set
╔════╦══════════ ══════════╗
║ ID ║ List_Output ║
╠════╬══════════ ══════════╣
║ 1 ║ 100, 200, 300, 400 ║
╚════╩══════════ ══════════╝
پیدا کردم اینجا میزارم اگه کسی نیاز داشت استفاده کنه.

فقط یک سوال اگه فقط بخوام اونهایی که دوبار تکرار های متفاوت دارن را پیدا کنه باید پیکار کنم؟
مثلا

1 و 200
1و 300
---------------
2 و 200
2 و 400
----------------
و ...
خروجی
--------------------
1 | 200 و 300 |
-------------------|
2 | 200 و 400 |
--------------------

Iran58
سه شنبه 28 آذر 1396, 08:46 صبح
سلام

select ID, STRING_AGG(Value ,CHAR(13)) as a from @Table1
group by ID

هم از لحاظ سرعت و هم صحت اطلاعات از روش قبلی بهتر است
نکته فقط در sql2016 به بالا این تابع قابل اجرا است