आपका प्रश्न करने में शामिल होने के एक तरह से भ्रामक है; क्या आप प्रति उपयोगकर्ता केवल एक पंक्ति दिखाना चाहते हैं, या आप प्रति चित्र एक पंक्ति दिखाना चाहते हैं लेकिन U.NAME फ़ील्ड में दोहराने वाले मानों को दबाएं? मुझे लगता है कि आप दूसरा चाहते हैं; अगर पहले के लिए बहुत सारे जवाब नहीं हैं।
दोहराने वाले मान प्रदर्शित करना चाहे तर्क तर्क है, जिसे एसक्यूएल वास्तव में डिजाइन नहीं किया गया था। परिणाम पंक्ति-दर-पंक्ति को संसाधित करने के लिए आप एक लूप में कर्सर का उपयोग कर सकते हैं, लेकिन आप बहुत सारे प्रदर्शन खो देंगे। यदि आपके पास .NET भाषा या जावा जैसी "स्मार्ट" फ्रंटेंड भाषा है, तो जो भी निर्माण आपने इस डेटा को रखा है उसे यूआई में अंततः प्रदर्शित करने से पहले दोहराने वाले मूल्यों को दबाने के लिए सस्ती रूप से छेड़छाड़ की जा सकती है।
यदि आप माइक्रोसॉफ्ट एसक्यूएल सर्वर का उपयोग कर रहे हैं, और डेटा परत पर परिवर्तन किया जाना है, तो आप प्रारंभिक क्वेरी को पकड़ने के लिए एक सीटीई (संगणित तालिका अभिव्यक्ति) का उपयोग करने पर विचार कर सकते हैं, फिर प्रत्येक पंक्ति से मूल्यों का चयन करें सीटीई इस बात पर आधारित है कि पिछली पंक्ति में कॉलम समान डेटा रखते हैं या नहीं। यह कर्सर की तुलना में अधिक प्रदर्शनशील होगा, लेकिन यह किसी भी तरह से गन्दा हो जाएगा। निरीक्षण करें:
USING CTE (Row, Name, PicID)
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY U.NAME, P.PIC_ID),
U.NAME, P.PIC_ID
FROM USERS U
INNER JOIN POSTINGS P1
ON U.EMAIL_ID = P1.EMAIL_ID
INNER JOIN PICTURES P
ON P1.PIC_ID = P.PIC_ID
WHERE P.CAPTION LIKE '%car%'
ORDER BY U.NAME, P.PIC_ID
)
SELECT
CASE WHEN current.Name == previous.Name THEN '' ELSE current.Name END,
current.PicID
FROM CTE current
LEFT OUTER JOIN CTE previous
ON current.Row = previous.Row + 1
ORDER BY current.Row
उपर्युक्त नमूना TSQL- विशिष्ट है; पीएल/एसक्यूएल जैसे किसी भी अन्य डीबीपीएल में काम करने की गारंटी नहीं है, लेकिन मुझे लगता है कि अधिकांश एंटरप्राइज़-स्तरीय एसक्यूएल इंजनों में कुछ समान है।
एकाधिक P.PIC_ID में से कौन सा आप एकल U.NAME के साथ चाहते हैं? –