एचटीएमएल को मैन्युअल रूप से तैयार करने का एक बहुत ही बदसूरत तरीका यहां दिया गया है। एक अच्छा कारण है कि यह SQL सर्वर में नहीं है। मुझे यकीन है कि कुछ एक्सएमएल गुरु साथ आएंगे और मुझे और अधिक सीधी विधि से शर्मिंदा करेंगे (मैंने साइमन सबिन का समाधान लेकिन आपकी आवश्यकता के अनुसार इसका अनुवाद नहीं कर सका), लेकिन अभी के लिए:
DECLARE @x TABLE(Gender VARCHAR(6), Age INT, Name VARCHAR(32));
INSERT @x VALUES ('Male', 30, 'Bill'), ('Female', 27, 'Jenny'),
('Female', 27, 'Debby'), ('Male', 44, 'Frank');
DECLARE @html NVARCHAR(MAX) = N'';
;WITH x AS ( SELECT x.Age, x.Gender, x.Name,
dr = DENSE_RANK() OVER (PARTITION BY x.Gender ORDER BY x.Age),
gn = ROW_NUMBER() OVER (PARTITION BY x.Gender ORDER BY x.Age),
rn = ROW_NUMBER() OVER (ORDER BY x.Gender DESC, x.Age)
FROM @x AS x ) SELECT @html +=
CHAR(13) + CHAR(10) + CASE WHEN c1.gn = 1 THEN
CASE WHEN c1.rn > 1 THEN '</li></ul></li></ul>' ELSE '' END + '<ul><li>'
+ c1.Gender ELSE '' END + CHAR(13) + CHAR(10) + CHAR(9)
+ CASE WHEN c1.gn = 1 OR c1.Age <> c3.Age THEN
CASE WHEN c1.gn > 1 THEN '</li>' ELSE '<ul>' END + '<li>'
+ CONVERT(VARCHAR(32), c1.Age) ELSE '' END + CHAR(13) + CHAR(10) + CHAR(9)
+ CHAR(9) + CASE WHEN (c1.gn = 1 OR c1.Age <> c3.Age) THEN '<ul>' ELSE '' END
+ '<li>' + c1.Name + '</li>' + CASE WHEN c1.Age <> c2.Age OR c1.dr <> c2.dr
THEN '</ul>' ELSE '' END
FROM x AS c1
LEFT OUTER JOIN x AS c2
ON c1.rn = c2.rn - 1
LEFT OUTER JOIN x AS c3
ON c1.rn = c3.rn + 1
ORDER BY c1.Gender DESC, c1.Age;
SELECT @html += '</ul></li></ul></li></ul>';
PRINT @html; -- note you will need to deal with this
-- in another way if the string is large
परिणाम - ठीक वैसा नहीं जैसा आपने व्हाइट स्पेस के संदर्भ में मांगा था, लेकिन समान HTML रेंडरिंग:
<ul><li>Male
<ul><li>30
<ul><li>Bill</li></ul>
</li><li>44
<ul><li>Frank</li></ul>
</li></ul></li></ul><ul><li>Female
<ul><li>27
<ul><li>Jenny</li>
<li>Debby</li></ul></li></ul></li></ul>
संपादित करें अधिक साफ-सुथरे समाधान के लिए, साथ ही साथ बहुत सारे नाटक और एक अच्छा प्रदर्शन क्यों @ZeeTee StackOverflow पर सबसे अधिक परेशान करने वाला उपयोगकर्ता है, फॉलो-अप प्रश्न के लिए Mikael का समाधान देखें:
फॉर्मेट किए गए HTML के रूप में रिटर्न सिलेक्ट स्टेटमेंट (SQL) 2005)