Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nội suy động các hàng bổ sung trong truy vấn SQL

Bước đầu tiên là thêm một RowNumber để xác định hàng đầu tiên cho mỗi PorfoilioGroupID:

SELECT  p.PortfolioGroupID, 
        p.PortfolioGroupCode, 
        p.DisplayOrder, 
        p.MemberCode, 
        m.ContactCode, 
        m.Custom01, 
        RowNumber = ROW_NUMBER() OVER(PARTITION BY P.PortfolioGroupID ORDER BY m.ContactCode, p.MemberCode)
FROM    [APXFirm].[AdvApp].[vPortfolioGroupMemberFlattened] p
        LEFT OUTER JOIN [APXFirm].[AdvApp].[vPortfolioInterestedParty] m
            ON p.memberid = m.PortfolioID
WHERE   m.ContactCode is not null
AND     p.PortfolioGroupCode like '%_Package'
ORDER BY m.ContactCode, p.MemberCode;

Sau đó, bạn có thể nối tập kết quả của mình với một hàm tạo có giá trị bảng với 3 giá trị của bạn (Bìa, Trình phát biểu, Báo cáo) và chỉ cần thêm mệnh đề where để đảm bảo 'Bìa' chỉ xuất hiện cho hàng đầu tiên:

WITH Data AS
(   SELECT  p.PortfolioGroupID, 
            p.PortfolioGroupCode, 
            p.DisplayOrder, 
            p.MemberCode, 
            m.ContactCode, 
            m.Custom01, 
            RowNumber = ROW_NUMBER() OVER(PARTITION BY P.PortfolioGroupID ORDER BY p.DisplayOrder)
    FROM    [APXFirm].[AdvApp].[vPortfolioGroupMemberFlattened] p
            LEFT OUTER JOIN [APXFirm].[AdvApp].[vPortfolioInterestedParty] m
                ON p.memberid = m.PortfolioID
    WHERE   m.ContactCode is not null
    AND     p.PortfolioGroupCode like '%_Package'
)
SELECT  d.PortfolioGroupID, 
        d.PortfolioGroupCode, 
        d.DisplayOrder, 
        d.MemberCode, 
        d.ContactCode, 
        d.Custom01, 
        t.PDFType
FROM    Data d
        CROSS JOIN 
        (   VALUES
                ('Cover'),
                ('Seperator'),
                ('Report')
        ) t (PDFType)
WHERE   d.RowNumber = 1
OR      t.PDFType != 'Cover'
ORDER BY ContactCode, MemberCode;

Ví dụ trên SQL Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lặp lại mà không cần con trỏ trong SQL Server 2005

  2. Làm thế nào để thực hiện thủ tục được lưu trữ với các tham số đầu vào và đầu ra bằng EF?

  3. Sự khác biệt giữa VARCHAR và NVARCHAR trong máy chủ SQL - Hướng dẫn SQL Server / T-SQL Phần 32

  4. Có cách nào để hiển thị dạng xem trong sơ đồ cơ sở dữ liệu một cách trực quan trong SQL Server 2008 không?

  5. Truy vấn SQL để trả về bản ghi mới nhất cho mỗi ID