coalesce والحافظة في tsql
-
05-09-2019 - |
سؤال
أواجه مشكلة في الحصول على كيفية التمويل أو المحور على مجموعة سجلات SQL التي تبدو وكأنها:
ID VALUE GROUP
3 John 18
4 Smith 18
5 Microsoft 18
3 Randy 21
4 Davis 21
5 IBM 21
etc
وأريد مهيأ مثل هذا
NEWVALUE GROUP
Smith, John (Microsft) 18
Davis, Randy (IBM) 21
شكرا لأي اقتراحات ومساعدة!
المحلول
هذا ما فعلته، وآمل أن يناسبك
DECLARE @t table (id int, value VARCHAR(20), grupo int)
INSERT @T VALUES (3, 'John', 18)
INSERT @T VALUES (4, 'Smith', 18)
INSERT @T VALUES (5, 'Microsoft', 18)
INSERT @T VALUES (3, 'Randy', 21)
INSERT @T VALUES (4, 'Davis', 21)
INSERT @T VALUES (5, 'IBM', 21)
SELECT grupo, (SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 4) + ', ' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 3) + ' (' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 5) + ')'
FROM @t t
GROUP BY grupo
نصائح أخرى
SELECT LEFT(gvalue, LEN(gvalue) - 1) AS newvalue, _group
FROM (
SELECT DISTINCT _group
FROM mytable
) qo
CROSS APPLY
(
SELECT value + ', '
FROM mytable qi
WHERE qi._group = qo._group
FOR XML PATH ('')
) gr(qvalue)
إذا كان لديك دائما مجموعة من ثلاثة هارب ID
لكل _group
, ، يمكنك فقط استخدام:
SELECT m3._group, m3.value + ', ' + m4.value + '(' + m5.value + ')' AS newvalue
FROM mytable m3
LEFT JOIN
mytable m4
ON m4._group = m3.group
LEFT JOIN
mytable m5
ON m5._group = m3.group
WHERE m3.id = 3
AND m4.id = 4
AND m5.id = 5
ما تحتاجه غير محوري الاستعلام ولكن اختيار بسيط مع مجموعة من قبل وظيفة سلسلة سلسلة إجمالية. لكنني لا أتذكر الدالة الدقيقة في Tsql.
تحديث: لا توجد وظيفة سلسلة إجمالية في TSQL ولكن نظرا لأن SQL2005 يمكنك كتابة امتدادك الخاص لتنفيذ هذه الوظيفة. هناك الكثير من الأمثلة على Google البحث عن: مثال إجمالي تسلسل TSQL 2005.
هذا هو الهوكي قليلا، لكنني أعتقد أنه يجب أن تعمل بشكل جيد معقول لمجموعة بيانات صغيرة. إذا كنت قد حصلت على الكثير من البيانات، فأنت بحاجة إلى إنشاء مؤشر وحلقة.
select max(case when ID = 4 then VALUE else null end) + ', ' +
max(case when ID = 4 then VALUE else null end) + '( ' +
max(case when ID = 5 then VALUE else null end) + ') as NEWVALUE,
[GROUP]
group by [GROUP]
لا تنتمي إلى StackOverflow