SELECT A.akey,
(
SELECT TOP 1 T1.text1
FROM test1 T1
WHERE T1.akey=A.akey AND LEN(T1.TEXT1) = MAX(LEN(A.text1))
) AS TEXT1,
(
SELECT TOP 1 T2.text2
FROM test1 T2
WHERE T2.akey=A.akey AND LEN(T2.TEXT2) = MAX(LEN(A.text2))
) AS TEXT2,
(
SELECT TOP 1 T3.text3
FROM test1 T3
WHERE T3.akey=A.akey AND LEN(T3.TEXT3) = MAX(LEN(A.text3))
) AS TEXT3
FROM TEST1 AS A
GROUP BY A.akey
मुझे अभी एहसास हुआ कि आपने कहा है कि आपके पास 32 कॉलम हैं। मुझे ऐसा करने का कोई अच्छा तरीका नहीं दिख रहा है, जब तक कि UNPIVOT आपको प्रत्येक टेक्स्ट* कॉलम के लिए अलग-अलग पंक्तियाँ (akey, textn) बनाने की अनुमति नहीं देता।
संपादित करें: हो सकता है कि मुझे आज इसे समाप्त करने का मौका न मिले, लेकिन UNPIVOT उपयोगी लग रहा है:
;
WITH COLUMNS AS
(
SELECT akey, [Column], ColumnValue
FROM
(
SELECT X.Akey, X.Text1, X.Text2, X.Text3
FROM test1 X
) AS p
UNPIVOT (ColumnValue FOR [Column] IN (Text1, Text2, Text3))
AS UNPVT
)
SELECT *
FROM COLUMNS
ORDER BY akey,[Column], LEN(ColumnValue)