14

तक मैं निम्नलिखित प्रश्न हैं:एसक्यूएल अल्पविराम से अलग पंक्ति खंड

SELECT 
    Account, 
    Unit, 
    SUM(state_fee), 
    Code 
FROM tblMta 
WHERE MTA.Id = '123' 
GROUP BY Account,Unit 
निश्चित रूप से

यह एक अपवाद फेंकता है क्योंकि कोड group by खंड में नहीं है। प्रत्येक state_fee में एक कोड है। मैं इस कोड को 1 रिकार्ड में प्रदर्शित करने के लिए कैसे प्राप्त करूं (एक कोड प्रति राज्य_फी जो प्रति इकाई एकाधिक स्टेट_फी है) अल्पविराम से अलग सूची के रूप में? मैंने यहां विभिन्न समाधानों को देखा लेकिन मुझे group by के साथ काम करने वाला कोई भी नहीं मिला।

उत्तर

23

आप FOR XML PATH निर्माण का उपयोग करना चाहते:

SELECT ACCOUNT, 
     unit, 
     SUM(state_fee), 
     Stuff((SELECT ', ' + code 
       FROM tblmta t2 
       WHERE t2.ACCOUNT = t1.ACCOUNT 
        AND t2.unit = t1.unit 
        AND t2.id = '123' 
       FOR XML PATH('')), 1, 2, '') [Codes] 
FROM tblmta t1 
WHERE t1.id = '123' 
GROUP BY ACCOUNT, 
      unit 

अन्य उदाहरण देखें:

0

कोई अंतर्निहित है एकीकृत फ़ंक्शन को श्रेणीबद्ध करने के लिए, लेकिन इस लेख उपयोगकर्ता परिभाषित श्रेणीबद्ध समेकित फ़ंक्शन सहित कई वैकल्पिक समाधान, की चर्चा:

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

+0

सबसे पहले मैंने सोचा था कि projectdms बस मूल लेख w/scrapes o विशेषता, लेकिन वास्तव में साइट लेख लेखक –

+0

से संबंधित है लिंक लिंक मर चुका है। यहां एक विकल्प दिया गया है: https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ – gpinkas

0

यह आपको मेज, सूचकांक नाम, सूचकांक प्रकार, अनुक्रमित कॉलम दिखाई देगा, और शामिल कॉलम:

with [indexes] (table_name, index_name, column_name, index_id, key_ordinal, object_id, type_desc) 
as(
SELECT distinct 
    T.[name] AS [table_name], I.[name] AS [index_name], 
    AC.[name] AS [column_name], 
    I.[index_id], IC.[key_ordinal], T.[object_id], i.type_desc 
FROM sys.[tables] AS T 
    INNER JOIN sys.[indexes] I ON T.[object_id] = I.[object_id] 
    INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id] and IC.index_id=I.index_id 
    LEFT OUTER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id] 
WHERE T.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP' 
) 
select 
    distinct 
    db_name() as dbname, 
    type_desc, 
    table_name, 
    index_name, 
    column_name, 
    STUFF((
     select ', ' + column_name 
     from [indexes] t2 
     where t1.table_name=t2.table_name and t1.[index_name]=t2.[index_name] and t2.[key_ordinal] = 0 
     for xml path('')), 1, 2, '') inc_cols 
from [indexes] t1 
where t1.[key_ordinal] = 1 
GROUP BY table_name, index_name, type_desc, column_name 
संबंधित मुद्दे