Welcome to Sign in | Help
in Search

[Solved] Antete si detalii

Last post 11-05-2008, 12:35 PM by alinescoo. 3 replies.
Sort Posts: Previous Next
  •  11-05-2008, 11:42 AM 6065

    [Solved] Antete si detalii

    As vrea sa fac o functie tabelara in SQL Server 2005 care sa ini returneze detalii despre facturi, atat din antete si din detalii. Facand un join intre tabele obtin ceva de genul:

    NrFact Data Produs Cantitate
    Fact1 xxx P1 10
    Fact1 xxx P2 4
    Fact1 xxx P3 3
    Fact2 yyy P1 4
    Fact2 yyy P3 2

    Deoarece pe partea de client nu pot face nici un fel de procesare a datelor, iar rezultatul este afisat intr-un grid, as vrea ca rezultatul sa arate un pic altfel:

    Fact1 xxx P1 10
    P2 4
    P3 3
    Fact2 yyy P1 4
    P3 2


    Este posibil sa obtin asa ceva direct dintr-o FUNCTIE TABLE-VALUED ? Va rog sa va dati cu parerea.

    PS:Nu stiu cum sa fac sa se afiseze corect rezultatul final. Ideea e ca une am NrFact si data, cand se repeta a doua oara sa nu il mai afisez ci sa fie spatiu gol.
  •  11-05-2008, 12:06 PM 6066 in reply to 6065

    Re: Antete si detalii

    incearca cu ceva de forma
    select
    case when Numar = NumarContinuu then NrFact
    else ' fact precedenta'
    end as 'Pentru prima coloana din data grid', *

    from
    (
    select *,RANK() Over (Order By NrFact ) as Numar, Row_Number() Over (Order By NrFact ) as NumarContinuu
    ) tabela_cu_numere
    ( ma rog,
    tabela_cu_numere poti sa o transformi in CTE)

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  11-05-2008, 12:13 PM 6067 in reply to 6065

    Re: Antete si detalii

    Se poate. Să presupunem că avem următorul query (în AdventureWorks):

    SELECT h.SalesOrderNumber, h.OrderDate, p.Name as ProductName, d.OrderQty
    FROM Sales.SalesOrderHeader h
    INNER JOIN Sales.SalesOrderDetail d ON h.SalesOrderID=d.SalesOrderID
    INNER JOIN Production.Product p ON p.ProductID=d.ProductID
    ORDER BY OrderDate, SalesOrderNumber, ProductName

    Atunci putem folosi ceva de genul:

    SELECT CASE WHEN n=1 THEN SalesOrderNumber END AS SalesOrderNumber,
        CASE WHEN n=1 THEN OrderDate END AS OrderDate,
        ProductName, OrderQty
    FROM (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesOrderNumber ORDER BY ProductName) as n
        FROM (
            SELECT h.SalesOrderNumber, h.OrderDate, p.Name as ProductName, d.OrderQty
            FROM Sales.SalesOrderHeader h
            INNER JOIN Sales.SalesOrderDetail d ON h.SalesOrderID=d.SalesOrderID
            INNER JOIN Production.Product p ON p.ProductID=d.ProductID
        ) x
    ) y ORDER BY y.OrderDate, y.SalesOrderNumber, ProductName

    Răzvan
  •  11-05-2008, 12:35 PM 6068 in reply to 6067

    Re: Antete si detalii

    Intr-adevar, asta este ceea ce cautam. Problema rezolvat. Va multumesc domnilor.
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems