Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

नल गिनने और फिर उन्हें मौजूदा पंक्तियों के साथ मिलाने में समस्या

एक तरह का गन्दा और सबसे अधिक संभावना है कि इसमें सुधार किया जा सकता है

;With RawData AS
(
    select * from @t
)
,Ranked1 as
(
    select *, RANK() OVER (PARTITION BY GroupId, RowID ORDER BY ID, GroupId, RowID) R from @t
)
,Ranked2 as
(
    select *, R - RANK() OVER (PARTITION BY GroupId, RowID ORDER BY ID, GroupId, RowID) R2 from Ranked1
    where Data is null
)
,Ranked3 as
(
    select MIN(ID) as MinID, GroupId, RowID, R2, COUNT(*) C2 from Ranked2
    group by GroupId, RowID, R2
)
,Ranked4 as
(
    select RD.ID, RD.GroupId, RD.RowID, ISNULL(Data, C2) as C3 from RawData RD
    left join Ranked3 R3 on RD.ID = R3.MinID and RD.GroupId = R3.GroupId and RD.RowID = R3.RowID
    where ISNULL(Data, C2) is not null
)
,Grouped as
(
    select GroupId, RowID,
        (
            select isnull(C3, '') from Ranked4 as R41
            where R41.GroupId = R42.GroupId and R41.RowID = R42.RowID
            order by GroupId, RowID for xml path('')
        ) as C4
    from Ranked4 as R42
    group by GroupId, RowID
)
    select GroupId,
        stuff((
            select ',' + C4 from Grouped as G1
            where G1.GroupId = G2.GroupId
            order by GroupId for xml path('')
        ), 1, 1, '')
    from Grouped G2
    group by GroupId



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नया डेटाबेस बनाते समय सर्वश्रेष्ठ एएनएसआई विकल्प

  2. समूह के लिए tsql कुल स्ट्रिंग

  3. sql सर्वर:सभी तालिकाओं की सभी पंक्तियों को हटा दें

  4. TSQL md5 हैश C# .NET md5 से अलग है

  5. SQL Server 2008 में सभी गैर-सिस्टम ऑब्जेक्ट को हटाने के लिए स्क्रिप्ट