উত্তর:
select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;
আপনি এটি এখানে বাস্তবায়িত দেখতে পাচ্ছেন: স্কেল ফিডল ডেমো । ঠিক আপনার যা প্রয়োজন
দুটি ধাপে স্প্লিটিং আপডেট করুন । প্রথমে আমরা একটি অনন্য [নাম, আইডি] এর বিপরীতে সমস্ত মান (কমা দ্বারা পৃথক) থাকা একটি টেবিল পাই। তারপর প্রাপ্ত টেবিল থেকে আমরা দেখতে সকল নামের এবং প্রতিটি অদ্বিতীয় আইডি প্রতি একটিমাত্র মান হিসাবে মান পেতে এই এখানে ব্যাখ্যা এসকিউএল বেহালার ডেমো (যেমন দুই ফলাফলের সেট আছে নীচে স্ক্রোল করুন)
সম্পাদনা প্রশ্নে ভুল ছিল, আমি কেবল আইডি দিয়ে গ্রুপ করেছি। তবে দুটি গ্রুপ_ যোগাযোগের প্রয়োজন যদি (মানগুলি নাম এবং আইডি দিয়ে গোষ্ঠীযুক্ত করতে হয় এবং তারপরে সমস্ত আইডির মাধ্যমে)। আগের উত্তর ছিল
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
আপনি এটি এখানে প্রয়োগ করা দেখতে পারেন: এসকিউএল ফিডাল ডেমো
GROUP_CONCAT
নীরবে এটির আউটপুট কেটে যাবে group_concat_max_len
। SET group_concat_max_len=...
সাহায্য করবে, তবে ফিরে (বাইট?) দৈর্ঘ্যের চেয়ে কম কিনা তা যাচাই করে নেওয়া ভাল ধারণা group_concat_max_len
।
চেষ্টা করুন:
CREATE TABLE test (
ID INTEGER,
NAME VARCHAR (50),
VALUE INTEGER
);
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);
SELECT ID, GROUP_CONCAT(NAME ORDER BY NAME ASC SEPARATOR ',')
FROM (
SELECT ID, CONCAT(NAME, ':', GROUP_CONCAT(VALUE ORDER BY VALUE ASC SEPARATOR ',')) AS NAME
FROM test
GROUP BY ID, NAME
) AS A
GROUP BY ID;
এসকিউএল ফিডল: http://sqlfiddle.com/#!2/b5abe/9/0
প্রথমত, আমি কোনও আইডি রাখার কারণটি দেখতে পাচ্ছি না যা অনন্য নয়, তবে আমার ধারণা এটি কোনও আইডি যা অন্য টেবিলের সাথে সংযুক্ত। দ্বিতীয়টি সাবকিউয়ের দরকার নেই, যা সার্ভারকে মারধর করে। আপনি এই মত একটি ক্যোয়ারিতে এটি করুন
SELECT id,GROUP_CONCAT(name, ':', value SEPARATOR "|") FROM sample GROUP BY id
আপনি দ্রুত এবং সঠিক ফলাফল পেয়েছেন এবং ফলাফলটি "SE" এর দ্বারা বিভক্ত করতে পারেন | আমি সর্বদা এই বিভাজকটি ব্যবহার করি, কারণ এটি স্ট্রিংয়ের মধ্যে এটি খুঁজে পাওয়া অসম্ভব, কারণ এটি অনন্য। দুটি এ এর কোনও সমস্যা নেই, আপনি কেবল মানটি শনাক্ত করুন। অথবা আপনি চিঠিটি সহ আরও একটি কলম রাখতে পারেন যা আরও ভাল। এটার মত :
SELECT id,GROUP_CONCAT(DISTINCT(name)), GROUP_CONCAT(value SEPARATOR "|") FROM sample GROUP BY name
SELECT id, GROUP_CONCAT(CONCAT_WS(':', Name, CAST(Value AS CHAR(7))) SEPARATOR ',') AS result
FROM test GROUP BY id
আপনাকে অবশ্যই castালাই বা রূপান্তর করতে হবে, অন্যথায় বিএলএব ফিরে আসবে
ফলাফল হয়
id Column
1 A:4,A:5,B:8
2 C:9
অজগর বা জাভা এর মতো প্রোগ্রামের মাধ্যমে আপনাকে পুনরায় ফলাফলটি পরিচালনা করতে হবে
IF OBJECT_ID('master..test') is not null Drop table test
CREATE TABLE test (ID INTEGER, NAME VARCHAR (50), VALUE INTEGER );
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);
select distinct NAME , LIST = Replace(Replace(Stuff((select ',', +Value from test where name = _a.name for xml path('')), 1,1,''),'<Value>', ''),'</Value>','') from test _a order by 1 desc
আমার সারণির নাম পরীক্ষা করা হয়, এবং একত্রীকরণের জন্য আমি এক্সএমএল পাথ ('') সিনট্যাক্স ব্যবহার করি। স্টাফ ফাংশন স্ট্রিংটিকে অন্য স্ট্রিংয়ের মধ্যে serোকায়। এটি স্টার্ট পজিশনে প্রথম স্ট্রিংয়ে বর্ণের একটি নির্দিষ্ট দৈর্ঘ্য মুছে ফেলে এবং তারপরে দ্বিতীয় স্ট্রিংটি প্রথম স্ট্রিংয়ের প্রারম্ভিক অবস্থানে সন্নিবেশ করায়।
STUFF ফাংশনগুলি দেখতে এর মতো দেখাচ্ছে: STUFF (অক্ষর_প্রকাশ, শুরু, দৈর্ঘ্য, অক্ষর_প্রকাশ)
ক্যারেক্টার_এক্সপ্রেসন হ'ল অক্ষর ডেটার একটি অভিব্যক্তি। অক্ষর_প্রকাশটি অক্ষর বা বাইনারি ডেটার একটি ধ্রুবক, পরিবর্তনশীল, বা কলাম হতে পারে।
শুরু হ'ল একটি পূর্ণসংখ্যা মান যা মুছা এবং সন্নিবেশ শুরু করার জন্য অবস্থান নির্দিষ্ট করে। শুরু বা দৈর্ঘ্য যদি নেতিবাচক হয় তবে একটি নাল স্ট্রিং ফিরে আসে। শুরুটি যদি প্রথম অক্ষর_প্রকাশের চেয়ে দীর্ঘ হয় তবে একটি নাল স্ট্রিং ফিরে আসে। শুরু টাইপ বিগিন্ট হতে পারে।
দৈর্ঘ্য হল একটি পূর্ণসংখ্যা যা মুছতে অক্ষরের সংখ্যা নির্দিষ্ট করে। দৈর্ঘ্য যদি প্রথম অক্ষর_প্রকাশের চেয়ে দীর্ঘ হয় তবে মুছে ফেলা শেষ অক্ষর_প্রকাশের সর্বশেষ অক্ষর পর্যন্ত ঘটে। দৈর্ঘ্য টাইপ বিগিন্ট হতে পারে।
আইডি নির্বাচন করুন, গ্রুপ_কনক্যাট ( column
) ফ্রম ( নির্বাচন করুন আইডি, কনক্যাট ( name
, ':', গ্রুপ_কনক্যাট ( value
)) হিসাবে column
মাইটিবিএল গ্রুপের আইডি, নাম) টিবিএল গ্রুপের আইডি দ্বারা গ্রাহক;