سؤال

أواجه مشكلة في الحصول على كيفية التمويل أو المحور على مجموعة سجلات 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]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top