Hirdetés

Új hozzászólás Aktív témák

  • nyunyu
    félisten

    SELECT 
        Project.ProjectName AS 'Project Name',
        cost.CostCategory1 AS 'Cost category1',
        cost.CostCategory2 AS 'Cost category2'
    FROM Project
    INNER JOIN ProjectCost
        ON Project.projectID = ProjectCost.projectID

    Ha egy projektnek több költsége is lehet, akkor....
    SELECT 
        Project.ProjectName AS 'Project Name',
        SUM(cost.CostCategory1) AS 'Cost category1',
        SUM(cost.CostCategory2) AS 'Cost category2'
    FROM Project
    INNER JOIN ProjectCost
        ON Project.projectID = ProjectCost.projectID
    GROUP BY
        Project.ProjectName

    Ez így nem jó, mivel ő az egyes costCategory alá tartozó tételek összegét külön-külön oszlopban szeretné látni.

    Meg lehet csinálni PIVOT() nélkül is, oszloponként külön JOINnal:
    SELECT p.projectName 'Project Name',
    SUM(pc1.cost) 'Cost category1',
    SUM(pc2.cost) 'Cost category2',
    SUM(pc3.cost) 'Cost category3',
    SUM(pc4.cost) 'Cost category4'
    FROM Project p
    LEFT JOIN ProjectCost pc1
    ON pc1.projectID=p.projectID
    AND pc1.costCategory='Cost category1'
    LEFT JOIN ProjectCost pc2
    ON pc2.projectID=p.projectID
    AND pc2.costCategory='Cost category2'
    LEFT JOIN ProjectCost pc3
    ON pc3.projectID=p.projectID
    AND pc3.costCategory='Cost category3'
    LEFT JOIN ProjectCost pc4
    ON pc4.projectID=p.projectID
    AND pc4.costCategory='Cost category4'
    GROUP BY p.projectName
    ORDER BY p.projectName;

    Itt az egyes JOINoknál szűröm a costCategory értékét, hogy az adott oszlopban melyik értékhez tartozó tételek látszanak (amiket aztán szummázunk).

    PIVOT()-tal rövidebben, tömörebben lehet ugyanezt megcsinálni, viszont a mit írjak a FOR és IN részekhez megértése elsőre nehéz lehet.

Új hozzászólás Aktív témák